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
файл.
И снова, вы должны предпочесть использовать два модуля.