Невозможно направить с модулем в 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();?>"внутри него.

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