2012-12-22 85 views
4

模塊/的applcation /配置/ module.config.phpZF2查看網址助手忽略控制器和動作

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'Application\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     'application' => array(
      'type' => 'Segment', 
      'options' => array(
       'route' => '/application[/:action][/]', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
      'may_terminate' => true, 
     ), 
    ), 
), 

在我IndexController.php我有一個的indexAction()和validateAction() - (只是嘗試他們不真的沒有一個功能)

我可以看到很好的意見。但我寫的觀點:

echo $this->url('application',array('action' => 'validate')); 

它只是回聲

/application/ 

我怎樣才能得到它的迴應與行動的路徑?我試過了我能想到的所有內容,並找不到任何有關此問題或任何其他人遇到同樣問題的合理文檔。

這裏是在配置的頁面負載的var_dump:

array(5) { 
["router"]=> 
array(1) { 
    ["routes"]=> 
    array(2) { 
    ["home"]=> 
    array(2) { 
     ["type"]=> 
     string(28) "Zend\Mvc\Router\Http\Literal" 
     ["options"]=> 
     array(2) { 
     ["route"]=> 
     string(1) "/" 
     ["defaults"]=> 
     array(2) { 
      ["controller"]=> 
      string(28) "Application\Controller\Index" 
      ["action"]=> 
      string(5) "index" 
     } 
     } 
    } 
    ["application"]=> 
    array(2) { 
     ["type"]=> 
     string(7) "segment" 
     ["options"]=> 
     array(2) { 
     ["route"]=> 
     string(25) "/application[/:action][/]" 
     ["defaults"]=> 
     array(3) { 
      ["__NAMESPACE__"]=> 
      string(22) "Application\Controller" 
      ["controller"]=> 
      string(5) "Index" 
      ["action"]=> 
      string(5) "index" 
     } 
     } 
    } 
    } 
} 
["service_manager"]=> 
array(1) { 
    ["factories"]=> 
    array(1) { 
    ["translator"]=> 
    string(45) "Zend\I18n\Translator\TranslatorServiceFactory" 
    } 
} 
["translator"]=> 
array(2) { 
    ["locale"]=> 
    string(5) "en_US" 
    ["translation_file_patterns"]=> 
    array(1) { 
    [0]=> 
    array(3) { 
     ["type"]=> 
     string(7) "gettext" 
     ["base_dir"]=> 
     string(57) "/home/marshall/html/module/Application/config/../language" 
     ["pattern"]=> 
     string(5) "%s.mo" 
    } 
    } 
} 
["controllers"]=> 
array(1) { 
    ["invokables"]=> 
    array(1) { 
    ["Application\Controller\Index"]=> 
    string(38) "Application\Controller\IndexController" 
    } 
} 
["view_manager"]=> 
array(7) { 
    ["display_not_found_reason"]=> 
    bool(true) 
    ["display_exceptions"]=> 
    bool(true) 
    ["doctype"]=> 
    string(5) "HTML5" 
    ["not_found_template"]=> 
    string(9) "error/404" 
    ["exception_template"]=> 
    string(11) "error/index" 
    ["template_map"]=> 
    array(4) { 
    ["layout/layout"]=> 
    string(73) "/home/marshall/html/module/Application/config/../view/layout/layout.phtml" 
    ["application/index/index"]=> 
    string(83) "/home/marshall/html/module/Application/config/../view/application/index/index.phtml" 
    ["error/404"]=> 
    string(69) "/home/marshall/html/module/Application/config/../view/error/404.phtml" 
    ["error/index"]=> 
    string(71) "/home/marshall/html/module/Application/config/../view/error/index.phtml" 
    } 
    ["template_path_stack"]=> 
    array(1) { 
    [0]=> 
    string(53) "/home/marshall/html/module/Application/config/../view" 
    } 
} 
} 

回答

1

如果你從ZendSkeletonApplication開始,你刪除從應用程序模塊的配置的pre-defined 'application' route?我可以在最新的ZendSkeletonApplication中複製這一點的唯一方法是在已經定義的路由之前定義你的應用程序路由。

例如,在module.config.php該路由部分工作對我來說:

'router' => array(
    'routes' => array(
     'home' => array(
      'type' => 'Zend\Mvc\Router\Http\Literal', 
      'options' => array(
       'route' => '/', 
       'defaults' => array(
        'controller' => 'Application\Controller\Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
     'application' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '/application[/:action][/]', 
       'defaults' => array(
        '__NAMESPACE__' => 'Application\Controller', 
        'controller' => 'Index', 
        'action'  => 'index', 
       ), 
      ), 
     ), 
    ), 
) 

利用這一點,它的工作原理:

<?= $this->url('application', array('action' => 'validate')) ?> 
// Produces /application/validate/ 
+0

是啊,這是我在module.config.php我的應用目錄。我剛剛編輯了框架應用程序的內容。這不是一個覆蓋的東西。當我搞砸了它的時候,我使用文字路線而不是段來使用它。這應該是有效的,但事實並非如此。 –

+1

事實證明這是我的一個愚蠢的錯誤。我正在改變html屬性中第二個echo'd部分的值,並觀察第一個值作爲文本回顯,並想知道它爲什麼沒有改變。 –