2013-08-28 157 views
0

所以我有一個新的ZF2安裝,一切正常,除非我創建一個新的控制器... FooController.php和我去應用程序/富我得到一個404我不'弄不明白爲什麼,我必須設置的路線,在ZF1制定出箱Zend Framework 2路由不工作

<?php 
/** 
* Zend Framework (http://framework.zend.com/) 
* 
* @link  http://github.com/zendframework/ZendSkeletonApplication for the canonical source repository 
* @copyright Copyright (c) 2005-2013 Zend Technologies USA Inc. (http://www.zend.com) 
* @license http://framework.zend.com/license/new-bsd New BSD License 
*/ 

namespace Application\Controller; 

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

class FooController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     $view = new ViewModel(array(
      'foo' => 'The Foo Controller' 
     )); 
     return $view; 
    } 
} 

回答

1

的是你需要設置在leaast一個途徑。你可以建立一個通用的途徑來處理控制器/動作類型的路由:

/** 
* Generic Route 
*/ 
'generic_route' => array(
    'type' => 'segment', 
    'options' => array(
     'route' => '[/:controller[/:action[/:id[/:extra]]]][/]', 
     'constraints' => array(
      '__NAMESPACE__' => 'Application\Controller', 
      'action'  => '[a-zA-Z][a-zA-Z0-9_-]*', 
      'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 
      'id'   => '[0-9]+', 
      'extra'   => '[a-zA-Z0-9_-]+', 
     ), 
     'defaults' => array(
      'controller' => 'Index', 
      'action'  => 'index', 
     ), 
    ), 
), 
0

的解決方案是創建這樣一個新的路線:

'foo' => array(
     'type' => 'Zend\Mvc\Router\Http\Literal', 
     'options' => array(
      'route' => '/foo', 
      'defaults' => array(
       '__NAMESPACE__' => 'Application\Controller', 
       'controller' => 'Application\Controller\Foo', 
       'action'  => 'index', 
      ), 
     ), 
    ), 

'controllers' => array(
    'invokables' => array(
     'Application\Controller\Index' => 'Application\Controller\IndexController', 
     'Application\Controller\Foo' => 'Application\Controller\FooController', 
    ), 

我覺得這是它在ZF2的方式,你可以自動完成,你必須爲每個新控制器創建一個路由

+0

你不需要每個控制器的路由,你可以像上面一樣捕獲所有的控制器/操作 – Andrew