ZF2 автозагрузка пользовательского контроллера

Я создал простое приложение в ZF2. В какой-то момент я решил создать новый набор функций, поэтому я создал новую папку следующим образом:

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

IndexController имеет пространство имен Application\Controller и действия работают нормально, но когда я пытаюсь запустить действие из FooController (пространство имен Issue\Controller) это бросает Class 'Issue\Controller\FooController', Конечно я поставил routes а также controllers в конфигурации (без него это все равно было 404).

2 ответа

Проблема заключается в том, что имя вашей папки в 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

Подробнее о теме здесь на этот вопрос на Stackru

РЕДАКТИРОВАТЬ

Читайте также больше о том, как правильно настроить свой модуль, правильно загружая его через autoLoaderConfig в вашем module.php а также PSR-0 соглашения об именах здесь в руководстве пользователя ZF2

Это действительно проблема автозагрузки (но не волшебство). Вы можете зарегистрировать свое пространство имен следующим образом (простой пример):

<?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.php файл в Application а также Issue папки, и "глобальный" Module.php будет выглядеть так:

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

И вы также можете зарегистрировать свои автозагрузочные пространства имен в каждом Module.php файл.

И снова, вы должны предпочесть использовать два модуля.

Другие вопросы по тегам