我是 Zend 的新手,我对 Zend 路由器有点麻烦。我已经搜索过它,但没有找到...
我希望能够在 uri 级别为每个定义的变量定义一个路由器,以指向一个控制器中的不同操作。
我正在使用语言和模块,所以我在引导应用程序中定义了下一个 initRoutes 函数:
protected function _initRoutes()
{
$front = Zend_Controller_Front::getInstance();
$router = $front->getRouter();
$defaultRoute = new Zend_Controller_Router_Route(
':lang/:module/:controller/:action',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'index',
'action' => 'index'
),
array(
'lang' => '^(en|es)$',
'module' => '^(default|admin)$'
)
);
$router->addRoute('defaultRoute', $defaultRoute);
return $router;
}
我希望能够通过他们定义的操作访问论坛部分和论坛主题。
就像是 :
我的域名/论坛 -> 论坛/索引
mydomain/forum/section -> 论坛/sectionAction
mydomain/forum/section/topic -> 论坛/topicAction
以及在 uri 级别定义的语言和模块,例如:
我的域/语言/模块/论坛
mydomain/lang/module/forum/section
mydomain/lang/module/forum/section/topic
所以我有这个:
class ForumController extends Zend_Controller_Action
{
public function indexAction()
{
}
public function sectionAction()
{
}
public function topicAction()
{
}
然后我在 Default_Bootstrap 中创建了下一个路由:
$forumRoutes = new Zend_Controller_Router_Route(
':lang/:module/forum',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'index'
)
);
$sectionRoutes = new Zend_Controller_Router_Route(
':lang/:module/forum/:section',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'section',
'section' => ''
)
);
$topic = new Zend_Controller_Router_Route(
':lang/:module/forum/:section/:topic',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'topic',
'section' => '',
'topic' => ''
)
);
$router->addRoute('forumTopics', $topic);
$router->addRoute('forumSections', $section);
$router->addRoute('forum', $forumRoutes);
现在,这仅在我在 uri 级别定义语言和模块时才有效,但如果我定义为 => mydomain/forum/section | 则不起作用 部分/主题。这也给我的导航->菜单带来了另一个问题。如果我在路由器定义中将“论坛”定义为静态变量,当我将鼠标悬停在 navigatoin.xml 中定义的任何标签上时,uri 级别对于每个标签都有相同的值。
我试图制作这样的链条:
$forumRoutes = new Zend_Controller_Router_Route(
':lang/:module/forum',
array(
'lang' => 'es',
'module' => 'default',
'controller' => 'forum',
'action' => 'index'
)
);
$section = new Zend_Controller_Router_Route(
':section',
array(
'action' => 'section',
'section' => ''
)
)
$topic = new Zend_Controller_Router_Route(
':topic',
array(
'action' => 'topic',
'topic' => ''
)
)
$chainedRoute = new Zend_Controller_Router_Route_Chain();
$chainedRoute->chain($topic)
->chain($section)
->chain($forumRoutes);
$router->addRoute($chainedRoute);
但这并不像我预期的那样工作。
任何帮助将不胜感激,谢谢。