2015-11-16 70 views
10

我有模塊路由問題。我有2個模塊,應用程序和管理員。每個模塊具有的indexAction默認動作:Zend框架2模塊名稱路由問題

本地主機/ - >應用程序/指數

本地主機/管理/ - >管理員/指標

管理員/指標只適用於本地主機/管理/指數/

當模塊名稱以字母「A」開頭時,會發生此問題。如果我將管理員重命名爲「汽車」,本地主機/汽車/正常工作!

錯誤是:

A 404 error occurred 
The requested controller was unable to dispatch the request. 
Controller: 
Application\Controller\Application 
No Exception available 

這是module.config.php應用模塊內:

<?php 
return array(
    'router' => array(
     'routes' => array(
      'Application' => array(
       'type' => 'Segment', 
       'options' => array(
        'route' => '[/][:action/]', 
        'constraints' => array(
         'action' => '[a-zA-Z][a-zA-Z0-9_-]*',       
        ), 
        'defaults' => array(
         'controller' => 'Application\Controller\Application', 
         'action'  => 'index', 
        ), 
       ), 
      ), 
     ), 
    ), 
    'controllers' => array(
     'invokables' => array(
      'Application\Controller\Application' => 'Application\Controller\IndexController' 
     ), 
    ), 

    'view_manager' => array(
     'display_not_found_reason' => true, 
     'display_exceptions'  => true, 
     'not_found_template'  => 'error/404', 
     'exception_template'  => 'error/index', 
     'template_map' => array(
      'layout/layout'   => __DIR__ . '/../view/layout/layout.phtml', 
      'Application/Application/index' => __DIR__ . '/../view/Application/index/index.phtml', 
      'error/404'    => __DIR__ . '/../view/error/404.phtml', 
      'error/index'    => __DIR__ . '/../view/error/index.phtml', 
     ), 
     'template_path_stack' => array(
      'Application' => __DIR__ . '/../view', 
     ), 
    ), 
); 
?> 

這是管理模塊內module.config.php:

<?php 
return array(
    'router' => array(
     'routes' => array(
      'Admin' => array(
       'type' => 'Segment', 
       'options' => array(
        'route' => '/admin/[:action/]', 
        'constraints' => array(
         'action' => '[a-zA-Z][a-zA-Z0-9_-]*' 
        ), 
        'defaults' => array(
         'controller' => 'Admin\Controller\AdminController', 
         'action' => 'index' 
        ), 
       ), 
      ), 
     ), 
    ), 
    'controllers' => array(
     'invokables' => array(
      'Admin\Controller\AdminController' => 'Admin\Controller\AdminController' 
     ), 
    ), 
    'view_manager' => array(
     'display_not_found_reason' => true, 
     'display_exceptions'  => true, 
     'template_path_stack'  => array(
      'Admin' => __DIR__ . '/../view', 
     ), 
    ), 
); 
?> 

IndexController.php

namespace Application\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

class IndexController extends AbstractActionController 
{ 

    public function indexAction(){ 

    } 
} 

AdminController.php

namespace Admin\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

class AdminController extends AbstractActionController 
{ 

    public function indexAction() 
    {} 
} 

任何人都可以幫我嗎?

+0

你遇到什麼樣的錯誤消息? –

+1

請求'/ admin /'匹配你的應用和管理路由。要解決你的問題,你需要消除這種歧義。 –

+0

發生404錯誤 請求的控制器無法分派請求。 控制器: 應用程序\控制器\應用程序 沒有例外可用 –

回答

3

首先,您的錯誤The requested controller was unable to dispatch the request.僅在路由器無法將請求分派到其定義的操作時發生。因此,請確認您的控制器是否正確,並且這些操作是否存在並可調用。

由於已經指出您的/admin/路由將指向兩個配置的端點。當管理路由在配置中的應用程序路由之前被定義時,這首先不是問題。

所以你的路線/admin/路線將永遠不會被路由到您的AdminController爲其他動態路由將首先匹配。

爲了使您的預期結果在您的路線中使用priority設置,以確保您的Admin路線將在您的Application路線之前匹配。

'router' => array(
    'routes' => array(
     'Admin' => array(
      'priority' => 100, 
      'type' => 'Segment', 
      'options' => array(
       'route' => '/admin/[:action/]', 
       'constraints' => array(
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*' 
       ), 
       'defaults' => array(
        'controller' => 'Admin\Controller\AdminController', 
        'action' => 'index' 
       ), 
      ), 
     ), 
    ), 
), 

除了你的問題,不結束PHP腳本?>,因爲這可能會導致錯誤時,一個空白的結束標記之後。

+0

作品!非常感謝您的幫助! –