2014-10-16 6 views
0

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

мой маршрут работает, когда я этот URL-адрес {MyApp}/MODULENAME/controllername но когда я этот {MyApp}/MODULENAME он возвращает 404.

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

 
return array(
    'controllers' => array(
     'invokables' => array(
      'Modulename\Controller\Mycontroller'  => 'Modulename\Controller\TheController', 
     ), 
    ), 
    'router' => array(
     'routes' => array(
      'modulename' => array(
       'type' => 'Literal', 
       'options' => array(
        'route' => '/modulename', 
        'defaults' => array(
         '__NAMESPACE__' => 'Modulename\Controller', 
         'controller' => 'My', 
         'action'  => 'index', 
        ), 
       ), 
       'may_terminate' => true, 
       'child_routes' => array(
        'thechild' => array(
         'type' => 'Segment', 
         'options' => array(
          'route' => '[/:controller][/:action][/:id]', 
          'constraints' => array(
            'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
            'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
            'id'   => '[0-9]*', 
          ), 
          'defaults' => array( 
           '__NAMESPACE__' => 'Modulename\Controller', 
           'controller' => 'User', 
           'action'  => 'index', 
          ), 
         ), 
        ), 
       ), 
      ), 
     ), 
    ), 


     'view_manager' => array(
      'template_path_stack' => array(
       'users' => __DIR__.'/../view', 
      ), 
      'display_exceptions' => true, 
     ), 
    ); 
+0

, что в том, что thechild под ребенком маршрутов: изменить это «по умолчанию» => .... –

ответ

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

Здесь используется имя контроллера '' TheController

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

Но здесь вы указали имя контроллера 'My'.

Изменение здесь 'контроллер' => '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(), 
0

спасибо за ваши ответы, я нашел еще один способ, поставив код в module.php

Вот мой код:

 
if($e->getRouteMatch()->getMatchedRouteName() == 'modulename') { 
    $response->getHeaders()->addHeaderLine('Location', $e->getRequest()->getBaseUrl() . '/modulename/user/index'); 
    $response->setStatusCode(302); 
} 
1

вы не имеете любой контроллер с именем My в 'controller' => 'My',

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

'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]]]', 
Смежные вопросы