ZF2自动加载自定义控制器

时间:2014-06-19 07:52:59

标签: zend-framework2 php-5.3 autoload

我在ZF2中创建了一个简单的应用程序。在某些时候,我决定创建一组新的功能,所以我用这种方式创建了一个新文件夹:

module
    Application
        src
            Application
                Controller
                    IndexController.php
            Issue
                Controller
                    FooController.php

IndexController具有命名空间Application\Controller并且操作正常工作但是当我尝试从FooController(命名空间Issue\Controller)运行操作时,它会抛出Class 'Issue\Controller\FooController'。当然,我已经在配置中设置了routescontrollers(没有它,无论如何它都抛出了404)。

2 个答案:

答案 0 :(得分:0)

问题在于src中的文件夹名称应与模块的文件夹名称相对应。我认为这与ZF2中的自动加载命名空间魔法有关。

所以像@Demo建议你需要这样做:

module
    Application
        src
            Application
                Controller
                    IndexController.php
    Issue
        src
            Issue
                Controller
                    FooController.php

或者这个:

module
    Application
        src
            Application
                Controller
                    IndexController.php
                    FooController.php

详细了解主题here at this question on StackOverflow

修改

详细了解如何正确设置模块,通过autoLoaderConfigmodule.php命名惯例here in the ZF2 user-guid中的PSR-0正确自动加载

答案 1 :(得分:0)

这确实是一个自动加载问题(但没有魔法)。 您可以像这样注册您的命名空间(只是一个简单的例子):

<?php

namespace Application;

use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;

class Module
{
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    'Application' => __DIR__ . '/src/Application',
                    'Issue'       => __DIR__ . '/src/Issue',
                ),
            ),
        );
    }
}

修改

对于PSR-0合规性,您可以在Module.phpApplication文件夹中放置Issue文件,“global”Module.php将如下所示:

<?php
require_once __DIR__ .'/src/Application/Module.php';
require_once __DIR__ .'/src/Issue/Module.php';

您还可以在每个Module.php文件中注册自动加载命名空间。

同样,你应该更喜欢使用两个模块。