簡體   English   中英

preDispatch zend Framework 2無法正常工作

[英]preDispatch zend framework 2 not working

我在理解preDispatch時遇到問題,下面是我的代碼

 public function preDispatch(\Zend\Mvc\MvcEvent $e)
    {

        $application    = $e->getApplication();
        $serviceManager = $application->getServiceManager();
        $controller = $e->getTarget();
        $route = $controller->getEvent()->getRouteMatch();
        $hit_controller = $route->getParam('__CONTROLLER__');
        if(strcmp($hit_controller,"Dashboard")==0){
            $authService = $serviceManager->get('Admin\Authentication\Service');
            if (!$authService->hasIdentity()) {
                $pluginManager  = $serviceManager->get('Zend\Mvc\Controller\PluginManager');
                $redirectPlugin = $pluginManager->get('redirect');
                return $redirectPlugin->toRoute('Admin',array('controller'=>'Admin','action'=>'index'));
            }
        }
        return;
    } 

以下是我在module.config.php中定義的路由

return array(
    'router' => array(
        'routes' => array(
            'Dashboard' => array(
              'type' => 'Segment',
              'options' => array(
                  'route' => '/Dashboard[/:action][/:id]',
                  'defaults' => array(
                      '__NAMESPACE__' => 'Admin\Controller',
                        'controller'    => 'Dashboard',
                        'action'        => 'index',
                  ),

              ),

            ),
            'Admin' => array(
                'type'    => 'Segment',
                'options' => array(
                    'route'    => '/Admin[/:action][/:id]',
                    'defaults' => array(
                        '__NAMESPACE__' => 'Admin\Controller',
                        'controller'    => 'Admin',
                        'action'        => 'index',
                    ),
                ),
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'Admin\Controller\Admin' => 'Admin\Controller\AdminController',
            'Admin\Controller\Dashboard' => 'Admin\Controller\DashboardController'
        ),
    ),
    'view_manager' => array(  ),
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),
);

如果我輸入網址

public/Admin works fine
 public/Dashboard works fine
 public/Dashboard/edit works fine
 public/Dashboard/edit/11  fails

並顯示edit / 11的內容。 我不明白為什么preDispatch不能在Dashboard / edit / 11上運行?

可以請有人朝正確的方向引導。 任何建議/意見/幫助都受到高度重視。 謝謝

嘗試如下更改儀表板路線中的括號:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM