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

时间:2015-11-09 22:06:14

标签: php zend-framework routes

我在为一个非常简单的控制器设置路由时遇到了麻烦。我收到“请求的URL无法通过路由匹配”。错误。我已经在SO上查看了类似的已解决的问题,并且无法确定我做错了什么(例如:ZF2 - Zend Framework 2, understanding routing

我已经按照skeleton tutorial with the albums主题进行了操作,所有功能都完美无缺。我尝试复制相册模块,然后更改控制器,文件夹,模块配置等的名称。我认为这将是一个很好的方法来确认我至少可以复制工作代码。我只是试图echo "123"到页面,所以我尝试从新模块中删除表单,模型和一些视图的目录。

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

我想发布一些代码,这样有人可以指出我所犯的错误,并可能解释为什么错误。我试着密切注意案例,因为在整个教程中使用了单词album的不同变体,我并不是100%确定哪些应该与现在相匹配。我正在尝试让它适用于http://www.example.com/productbriefs

文件夹结构

Folder Structure

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";
    }
}

Module.php

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(),
        );
    }
}

1 个答案:

答案 0 :(得分:2)

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

要回答第二个问题,控制器管理员需要知道如何加载应用程序使用的控制器类。一个' invokable'是一个可以在不需要传递任何参数的情况下实例化的类,因此通过向该数组添加控制器,您可以告诉控制器管理器它只需执行$controller = new Productbriefs\Controller\ProductbriefsController()即可实例化该类。数组的关键是别名,是的。这可以是任何东西,虽然ZF惯例是使用类的完全限定名称但省略'控制器'从最后的后缀。在路由配置中引用控制器时,请使用这些别名。