Невозможно направить с модулем в ZF2
Я создал модуль, базовую копию примера альбомов, приведенного в документации ZF2, однако с новым модулем я вообще не могу получить к нему доступ - мне всегда выдается ошибка 404. Я строю это на скелете ZF2.
У меня загружены три модуля: приложение, интерфейс и безопасность.
И Frontend, и Security являются дубликатами друг друга, однако я тщательно проверил, и нет ссылок на старый код (поскольку я буквально скопировал папку модуля и переименовал / переписал ссылки).
Модуль также загружается в application.config.php.
Есть идеи о том, что мне не хватает?
Конфигурация модуля:
return array(
'controllers' => array(
'invokables' => array(
'Security\Controller\Security' => 'Security\Controller\SecurityController',
),
),
'router' => array(
'routes' => array(
'security' => array(
'type' => 'segment',
'options' => array(
'route' => '/security[/:action][/:id]',
'constraints' => array(
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'controller' => 'Security\Controller\Security',
'action' => 'index',
),
),
),
),
),
'view_manager' => array(
'template_path_stack' => array(
'security' => __DIR__ . '/../view',
),
),
);
4 ответа
У меня была такая же проблема, когда я следовал учебнику по скелетному приложению ( Начало работы: скелетное приложение). Всякий раз, когда я бы перейти на URL-адрес альбома в браузере (ZendSkeletonApplication/public/album
в моем случае), я получил бы страницу с ошибкой 404, но без подробностей о том, почему я получил 404. Мне не было ясно, как я смогу определить, почему я получал 404, когда я все перепроверил и был хорош уверен, что я скопировал и настроил модуль альбома правильно. Оказалось, что мне не хватало косой черты в моем маршруте (module.config.php). Например я имел 'route' => 'album[/:action][/:id]'
вместо 'route' => '/album[/:action][/:id]'
,
Я смог понять это только преднамеренно, вызывая ошибки, так как 'Album\Controller\Albums'
вместо 'Album\Controller\Album'
в значении invokables это приведет к отображению трассировки стека, которая затем показывает классы ZF2, которые были вызваны по запросу. Я продолжал неправильно писать, тестировать и затем исправлять каждую часть module.config.php, пока мне не дадут подсказку, какая часть конфигурации вызывает ошибку.
Я уверен, что это был не лучший способ отладки конфигурации приложения.
Есть несколько вещей, которые нужно убедиться, это:-
Вы должны добавить свой модуль в
- application.config.php (о котором вы говорите, что сделали это)
- Security \ Controller \ Security должен быть таким же по умолчанию (который у вас уже есть)
- Еще одна вещь, это структура вашей папки.... -
Просто чтобы проверить, у вас есть / MODULE / src /MODULE/Controller/CONTROLLER_FILE_NAME.php
Надеюсь, это поможет..
Простой совет, чтобы узнать, правильно ли ваше правило уже добавлено к маршрутам или нет, вы можете проверить значение маршрутов в файле конфигурации внутри любого рабочего модуля, как показано ниже:
$config = $this->serviceLocator->get('config');
var_dump($config);
Я знаю, что это старый пост. Однако еще одна вещь, которую нужно убедиться в том, что вы находитесь в верхнем каталоге модулей (в том же каталоге, что и файл Module.php), - это файл "autoload_classmap.php" с "<?php return array();?>
"внутри него.