Маршрут Zend Framework 2 работает неправильно

Как я могу добавить домашнюю страницу по умолчанию в маршрутизации?

мой маршрут работает, когда я получаю доступ к этому URL {myapp} / modulename / controllername
но когда я получаю доступ к этому {myapp} / modulename, он возвращает 404.

Как я могу это исправить?

возвращаемый массив (
'controllers' => array (
'invokables' => array (
'Modulename \ Controller \ Mycontroller' => 'Modulename \ Controller \ TheController',
),
),
'router' => array (
«маршруты» => массив (
'modulename' => array (
'type' => 'Literal',
'options' => array (
'route' => '/ modulename',
'defaults' => массив (
'__NAMESPACE__' => 'Modulename \ Controller',
'controller' => 'My',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => массив (
'thechild' => массив (
'type' => 'Segment',
'options' => array (
'route' => '[/: controller] [/: action] [/: id]',
'ограничений' => массив (
'controller' => '[a-zA-Z] [a-zA-Z0-9 _-] *',
'action' => '[a-zA-Z] [a-zA-Z0-9 _-] *',
'id' => '[0-9] *',
),
'defaults' => массив (
'__NAMESPACE__' => 'Modulename \ Controller',
'controller' => 'User',
'action' => 'index',
),
),
),
),
),
),
), 'view_manager' => массив (
'template_path_stack' => array (
'users' => __DIR __. '/ .. / view',
),
'display_exceptions' => true,
),
);

0

Решение

'Modulename\Controller\Mycontroller'     => 'Modulename\Controller\TheController',

Здесь вы использовали имя контроллера «TheController»

   'defaults' => array(
'__NAMESPACE__' => 'Modulename\Controller',
'controller'    => 'My',
'action'        => 'index',
),

Но здесь вы указали имя контроллера «Мой».

Измените здесь ‘controller’ => ‘The’ и проверьте

Если имя вашего контроллера «UserController», измените

'Modulename\Controller\Mycontroller'     => 'Modulename\Controller\TheController',

as

'Modulename\Controller\User'     => 'Modulename\Controller\UserController',

and

'defaults' => array(
'__NAMESPACE__' => 'Modulename\Controller',
'controller'    => 'My',
'action'        => 'index',
),

as

'defaults' => array(
'__NAMESPACE__' => 'Modulename\Controller',
'controller'    => 'User',
'action'        => 'index',
),

И измените это (после ‘may_terminate’)

'defaults' => array(
'__NAMESPACE__' => 'Modulename\Controller',
'controller'    => 'User',
'action'        => 'index',
),
),

as

'defaults' => array(),
1

Другие решения

у вас нет контроллера по имени My в 'controller' => 'My',

Вы должны изменить имя вызываемого контроллера:

'controllers'   => array(
'invokables'    => array(
'My'     => 'Modulename\Controller\TheController',
),
),

или измените контроллер по умолчанию в определении маршрутов на

'defaults' => array(
'__NAMESPACE__' => 'Modulename\Controller',
'controller'    => 'Modulename\Controller\Mycontroller',
'action'        => 'index',
),

и это определение маршрута также не является правильным

'route'    => '[/:controller][/:action][/:id]',

так должно быть

'route'    => '[/:controller[/:action[/:id]]]',
1

спасибо за ваши ответы, я нашел другой способ, поместив код в module.php

Вот мой код:

if ($ e-> getRouteMatch () -> getMatchedRouteName () == 'modulename') {
$ response-> getHeaders () -> addHeaderLine ('Location', $ e-> getRequest () -> getBaseUrl (). '/ modulename / user / index');
$ Response-> setStatusCode (302);
}
0
По вопросам рекламы [email protected]