Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2路由-路由无法匹配请求的URL_Php_Zend Framework_Routes - Fatal编程技术网

Php ZF2路由-路由无法匹配请求的URL

Php ZF2路由-路由无法匹配请求的URL,php,zend-framework,routes,Php,Zend Framework,Routes,我在为一个非常简单的控制器设置路线时遇到问题。我收到“路由无法匹配请求的URL”。错误。我在SO上看过类似的已解决问题,但无法指出我做错了什么(例如:) 我一直关注这个话题,一切都很好。我尝试复制相册模块,然后更改控制器、文件夹、模块配置等的名称。我认为这是一个确认我至少可以复制工作代码的好方法。我只是想echo“123”到页面上,所以我尝试从新模块中删除表单、模型和一些视图的目录 有什么方法可以看到我真正想要的路线和我定义的路线吗?我知道CI实际上创建了一个我可以检查的日志文件。它有点像Apa

我在为一个非常简单的控制器设置路线时遇到问题。我收到“路由无法匹配请求的URL”。错误。我在SO上看过类似的已解决问题,但无法指出我做错了什么(例如:)

我一直关注这个话题,一切都很好。我尝试复制相册模块,然后更改控制器、文件夹、模块配置等的名称。我认为这是一个确认我至少可以复制工作代码的好方法。我只是想
echo“123”
到页面上,所以我尝试从新模块中删除表单、模型和一些视图的目录

有什么方法可以看到我真正想要的路线和我定义的路线吗?我知道CI实际上创建了一个我可以检查的日志文件。它有点像Apache日志,但特定于框架功能

我想发布我的一些代码,以便有人能指出我犯的错误,并可能解释为什么它是错误的。我试着密切关注这个案例,因为在整个教程中使用了单词
相册
的不同变体,而且我还不能100%确定哪些应该与刚才的匹配。我正在努力使它为
http://www.example.com/productbriefs

文件夹结构

module.config.php:

return array(
'controllers' => array(
    'invokables' => array(
        'Productbriefs\Controller\Productbriefs' => 'Productbriefs\Controller\ProductbriefsController',
    ),
),

// The following section is new and should be added to your file
'router' => array(
    'routes' => array(
        'productbriefs' => array(
            'type'    => 'Literal',
            'options' => array(
                'route'    => '/productbriefs',
                'defaults' => array(
                    'controller' => 'Productbriefs\Controller\Productbriefs',
                    'action'     => 'index',
                ),
            ),
        ),
    ),
),

'view_manager' => array(
    'template_path_stack' => array(
        'productbriefs' => __DIR__ . '/../view',
    ),
),
))

ProductbriefsController.php

namespace Productbriefs\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class ProductbriefsController extends AbstractActionController
{

    public function indexAction()
    {
        echo "123";
    }
}
namespace Productbriefs;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    // Add this method:
    public function getServiceConfig()
    {
        return array(
            'factories' => array(),
        );
    }
}
Module.php

namespace Productbriefs\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class ProductbriefsController extends AbstractActionController
{

    public function indexAction()
    {
        echo "123";
    }
}
namespace Productbriefs;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\ModuleManager\Feature\ConfigProviderInterface;

class Module implements AutoloaderProviderInterface, ConfigProviderInterface
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\ClassMapAutoloader' => array(
                __DIR__ . '/autoload_classmap.php',
            ),
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    public function getConfig()
    {
        return include __DIR__ . '/config/module.config.php';
    }

    // Add this method:
    public function getServiceConfig()
    {
        return array(
            'factories' => array(),
        );
    }
}

根据我的评论,您需要将
Productbriefs
添加到
application.config.php
中的模块数组中,否则将不会加载模块(包括其配置)


要回答第二个问题,控制器管理器需要知道如何加载应用程序使用的控制器类。“invokable”是一个可以实例化的类,无需向其传递任何参数,因此,通过向该数组添加控制器,您告诉控制器管理器,只需执行
$controller=new Productbriefs\controller\Productbriefs controller()
,它就可以实例化该类。数组的键是别名,是。这可以是任何内容,尽管ZF约定使用类的完全限定名,但在末尾省略“Controller”后缀。当您在路由配置中引用控制器时,您使用了这些别名。

您是否将
Productbriefs
模块添加到
application.config.php
中的数组中?谢谢,就是这样。我知道这很简单。如果你给我一个答复,我会接受的。我相信我理解这3个文件中大多数元素之间的关系。我唯一不知道函数的部分是module.config.php中的
controllers->invokables
数组。这基本上只是为我的各种控制器设置了一个别名,这样我就不必在每次调用中附加
Controller
?(即:
Productbriefs
而不是
Productbriefs控制器