我是 ZF2 的新手,但我尝试编写一个应用程序。我遇到了可调用和路由配置的问题。
我有 2 个带有配置的模块:
<?php
return array(
'controllers' => array(
'invokables' => array(
'Index' => 'Vocabulary\Controller\IndexController'
,'Add' => 'Vocabulary\Controller\AddController'
,'Admin' => 'Vocabulary\Controller\AdminController'
)
)
,'router' => array(
'routes' => array(
'vocabulary' => array(
'type' => 'segment'
,'options' => array(
'route' => '/vocabulary[/:controller][/:action]'
,'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*'
,'action' => '[a-zA-Z][a-zA-Z0-9_-]*'
)
,'defaults' => array(
'controller' => 'Index'
,'action' => 'index'
)
)
)
)
)
和
<?php
return array(
'controllers' => array(
'invokables' => array(
'Admin' => 'Lang\Controller\AdminController'
,'Translation' => 'Lang\Controller\TranslationController'
)
)
,'router' => array(
'routes' => array(
'lang' => array(
'type' => 'segment'
,'options' => array(
'route' => '/lang[/:controller][/:action]'
,'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*'
,'action' => '[a-zA-Z][a-zA-Z0-9_-]*'
)
,'defaults' => array(
'controller' => 'Admin'
,'action' => 'index'
)
)
)
)
)
但是在 /vocabulary/admin 页面上,我看到 /lang/admin 页面的内容。看来,这个问题是可调用数组的键“Admin”是相等的。如何修改我的配置以使应用程序正常工作?我想保留“lang/admin”和“vocabulary/admin”路径。
我尝试使用“Vocabulary\Controller\Admin”而不是“Admin”作为可调用键,但没有帮助。
更新
我使用这种配置变体解决了这个问题(我希望它对某人有所帮助):
return array(
'controllers' => array(
'invokables' => array(
'Lang\Controller\Admin' => 'Lang\Controller\AdminController'
,'Lang\Controller\Translation' => 'Lang\Controller\TranslationController'
)
)
,'router' => array(
'routes' => array(
'lang' => array(
'type' => 'Literal'
,'options' => array(
'route' => '/lang'
,'defaults' => array(
'__NAMESPACE__' => 'Lang\Controller',
'controller' => 'Lang\Controller\Admin'
,'action' => 'index'
)
),
'may_terminate' => true,
'child_routes' => array(
'default' => array(
'type' => '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(
),
),
),
),
)
)
)
在这种情况下,查看帮助命令 $this->url('lang', array('controller' => 'translation')) 只返回“lang/”,但我使用 $this->serverUrl('/lang/translation' ); 两个模块都能正常工作。