2013-01-22 78 views
1

我正在ZF2骨架應用程序庫上開發一個Web應用程序。我有很多選擇,但沒有取得最後的進展。

我需要路由的網址爲下:

http://myapp/ 
http://myapp/en/album 

到AlbumController /的indexAction。此外,鏈接需要工作爲:

http://myapp/en/album/edit/1 
http://myapp/en/album/delete/1 

代碼生成正確的URL,但在點擊返回 「404」 錯誤

我的應用程序/ module.config.php是下:


return array (
     'router' => array (
       'routes' => array (
         'home' => array (
           'type' => 'Zend\Mvc\Router\Http\Literal', 
           'options' => array (
             'route' => '/', 
             'defaults' => array (
               'controller' => 'Album\Controller\Album', 
               'action' => 'index', 
               'lang'  => 'en', 
             ) 
           ) 
         ), 
         'application' => array (
           'type' => 'Literal', 
           'options' => array (
             'route' => '/application', 
             'defaults' => array (
               '__NAMESPACE__' => 'Application\Controller', 
               'controller' => 'Index', 
               'action' => 'index' 
             ) 
           ), 
           'may_terminate' => true, 
           'child_routes' => array (
             'default' => array (
               'type' => 'Segment', 
               'options' => array (
                 'route' => '[:lang[/album[/:action[/:id]]]]', 
                 'constraints' => array (
                   'lang'  => '[a-z]{2}', 
                   'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
                   'id' => '[0-9]+' 
                 ), 
                 'defaults' => array (
                   'controller' => 'Album\Controller\Album', 
                   'action' => 'index', 
                   'lang'  => 'en', 
                 ) 
               ) 
             ) 
           ) 
         ) 
       ) 
     ), 
     'service_manager' => array (
       'factories' => array (
         'translator' => 'Zend\I18n\Translator\TranslatorServiceFactory' 
       ) 
     ), 
     'translator' => array (
       'locale' => 'en_US', 
       'translation_file_patterns' => array (
         array (
           'type' => 'gettext', 
           'base_dir' => __DIR__ . '/../language', 
           'pattern' => '%s.mo' 
         ) 
       ) 
     ), 
     'controllers' => array (
       'invokables' => array (
         'Application\Controller\Index' => 'Application\Controller\IndexController' 
       ) 
     ), 
     'view_manager' => array (
       'display_not_found_reason' => true, 
       'display_exceptions' => true, 
       'doctype' => 'HTML5', 
       'not_found_template' => 'error/404', 
       'exception_template' => 'error/index', 
       'template_map' => array (
         'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', 
         'application/index/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 (
         __DIR__ . '/../view' 
       ) 
     ) 
); 

相冊/ module.config.php有以下路由器:


'router' => array (
       'routes' => array (
         'album' => array (
           'type' => 'segment', 
           'options' => array (
             'route' => '[:lang[/album[/:action[/:id]]]]', 
             'constraints' => array (
               'lang'  => '[a-z]{2}', 
               'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
               'id' => '[0-9]+' 
             ), 
             'defaults' => array (
               'controller' => 'Album\Controller\Album', 
               'action' => 'index', 
               'lang'  => 'en', 
             ) 
           ), 
         ) 
       ) 
     ), 

///////////////////////////////////// /////////////////////////////////////////////////// //現在,這工作正常。當我調用$ this-> url('album',array('action'=>'edit','id'=> $ album-> id));在視圖文件(一個.phtml),它一點兒也不返回預期正確的URL:

http://www.myapp.com/en/edit/id/1

/////////////////////// ////////////////////////////////////////////////// ////////////// //更正後的代碼適用於URL $ this-> url('album',array('action'=>'edit','id'=> $ album-> id)) ////////////////////////////////////////// /////////////////////////

欣賞提前幫助你。再次

'route' => '/[:lang[/album[/:action[/:id]]] 

感謝所有的幫助:

+0

':album'沒有'default'和'constraint',而且在你調用'$ this-> url()'時沒有指定相冊。其實我很想知道這條路線是否已經創建好了 – Sam

+0

我剛剛修復的代碼有一個問題: 'route'=>'[:locale [/:album [/ action] [/ id]]] ]', 應該是 'route'=>'[:locale [/ album [/:action [/ id]]]'', –

+0

你期待'edit-items'作爲你的動作,但你傳遞'edit '作爲參數。您還希望'/ id/1'作爲最後兩個段,但路由'[:locale [/:album [/ action] [/ id]]]]'中沒有'id'部分。它會讓你的問題分心很多。你能1)創建一個*最小*工作的例子和2)短語一個明確的問題?那麼回答你的問題會有很大的幫助! –

回答

1

的問題在專輯/ module.config.php失蹤 '/':

'route' => '[:lang[/album[/:action[/:id]]] 

應有的水平。