我使用這個配置在Zend2我的應用程序模塊的配置這是非常正常的,每一個建議作爲一個標準的路由規則:Zend2路由__NAMESPACE__不工作或忽視
'controllers' => array(
'invokables' => array(
'Application\Controller\Index' => 'Application\Controller\IndexController',
),
),
'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' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/[:controller[/:action]]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
),
'defaults' => array(
),
),
),
),
),
),
),
路由的home
工作正常。但http://localhost/application
我得到:
指數(解析爲無效的控制器類或別名:指數)
和http://localhost/application/index/index
我得到:
指數(解析爲無效的控制器類或別名:索引)
如果我改變這個:
'application' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'__NAMESPACE__' => 'Application\Controller',
'controller' => 'Index',
'action' => 'index',
),
),
這樣:
'application' => array(
'type' => 'Zend\Mvc\Router\Http\Literal',
'options' => array(
'route' => '/application',
'defaults' => array(
'controller' => 'Application\Controller\Index',
'action' => 'index',
),
),
正如你肯定知道http://localhost/application
這將正常工作像home
網址
,如果我用這個:
'controllers' => array(
'invokables' => array(
'index' => 'Application\Controller\IndexController',
),
),
如你所知的配置將合併,我應該在項目中只有一個索引控制器。
爲什麼行'__NAMESPACE__' => 'Application\Controller',
被忽略,它只在控制器數組中尋找索引或索引不存在?
編輯:
有了比較我加入這Application/Module.php
其他項目:
public function onBootstrap(MvcEvent $e)
{
$eventManager = $e->getApplication()->getEventManager();
$moduleRouteListener = new ModuleRouteListener();
$moduleRouteListener->attach($eventManager);
}
和它的作品,但現在我需要和解釋。這是解決方案嗎?我的意思是我應該添加到項目Module.php
文件之一,使路由規則工作正常嗎?爲什麼沒有它,__NAMESPACE__
將在路由規則中被忽略?
Thx,那麼__NAMESPACE__將不會被檢查沒有使用ModuleRouteListener? –
@ S.Gholizadeh沒錯 – Wilt