我正在与Zend-Router挣扎。我想在我的网址中链接语言。一切正常,但我的模块化路由。
如果我调用:http://domain.de/en/index
- 执行并翻译默认模块的IndexController的indexAction。
同样适用于:
http://domain.de/en/about
因此调用了IndexController的aboutAction。
如果我调用:http://domain.de/en/forum/index
它应该执行论坛模块的IndexController的indexAction。但事实并非如此。
我的目标是尽可能缩短我的网址,因此其中没有“默认”或“索引”。
你能帮我编辑我的routes.xml吗?这样我得到了想要的结果吗?
我的routes.xml
<config>
<routes>
<sc1 type="Zend_Controller_Router_Route">
<route>:lang/:@module/:@controller/:@action</route>
<defaults>
<lang>de</lang>
<module>default</module>
<controller>index</controller>
<action>index</action>
</defaults>
</sc1>
<sc2 type="Zend_Controller_Router_Route">
<route>:lang/:@module/:@action</route>
<defaults>
<lang>de</lang>
<module>default</module>
<controller>index</controller>
<action>index</action>
</defaults>
</sc2>
<sc3 type="Zend_Controller_Router_Route">
<route>:lang/:@controller/:@action</route>
<defaults>
<lang>de</lang>
<module>default</module>
<controller>index</controller>
<action>index</action>
</defaults>
</sc3>
<sc4 type="Zend_Controller_Router_Route">
<route>:lang/:@action</route>
<defaults>
<lang>de</lang>
<module>default</module>
<controller>index</controller>
<action>index</action>
</defaults>
</sc4>
</routes>
</config>
你有想法吗?
提前谢谢你, 托比亚斯
答案 0 :(得分:1)
我在Zend Routes上并不是太棒,但是看一下你的代码,你需要一种方法来区分它应该去哪个模块。您将其设置为所有出现的默认值。如果它像你拥有它一样是动态的会很好,但我认为你需要专门为论坛等设置路由。鉴于Zend需要知道将它发送到哪里。如果你可以弄清楚如何使用:@module变量将它发送到该模块,那可行但我不知道/认为这是可能的。
阅读完本手册后,我想出了这个结构。您必须定义每个项目,例如论坛,您希望它重定向到如下所示。
<config>
<routes>
<language type="Zend_Controller_Router_Route">
<route>:language</route>
<reqs language="[a-z]{2}">
</language>
<index type="Zend_Controller_Router_Route_Static">
<route></route>
<defaults module="default" controller="index" action="index" />
</index>
<about type="Zend_Controller_Router_Route_Static">
<route>about</route>
<defaults module="default" controller="index" action="about" />
</about>
<forums type="Zend_Controller_Router_Route_Static">
<route>forums</route>
<defaults module="forums" controller="index" action="index" />
</forums>
<lang-forums type="Zend_Controller_Router_Route_Chain">
<chain>language, forums</chain>
</lang-forums>
<lang-about type="Zend_Controller_Router_Route_Chain">
<chain>language, about</chain>
</lang-about>
</routes>
</config>
我对about
部分不是100%肯定,特别是链接,但弄乱它应该给你正确的方法。
修改强>
下面是另一个可能的例子。我想我上面有正确的答案。
查看Zend Routes Manual,如何设置它会让人感到困惑。我也不喜欢使用xml格式,我更喜欢.ini,但是这里有一个“psuedo模拟”它应该如何工作(未经测试,因为它很难测试):
lang.index.type = "Zend_Controller_Router_Route"
lang.index.route = ":language"
lang.index.defaults.controller = index
lang.index.defaults.action = index
lang.forums.index.type = "Zend_Controller_Router_Route_Static"
lang.forums.index.route = "forums"
lang.forums.index.controller = forums
lang.forums.index.action = index
lang.forums.register.type = "Zend_Controller_Router_Route_Static"
lang.forums.register.route = "forums/register"
lang.forums.register.controller = forums
lang.forums.register.action = register
lang.forums.login.type = "Zend_Controller_Router_Route_Static"
lang.forums.login.route = "forums/login"
lang.forums.login.controller = forums
lang.forums.login.action = login
lang.forums.view.type = "Zend_Controller_Router_Route_Static"
lang.forums.view.route = "forums/thread/:slug"
lang.forums.view.controller = forums
lang.forums.view.action = view
lang.other.index.type = "Zend_Controller_Router_Route_Static"
lang.other.index.route = "other"
lang.other.index.controller = other
lang.other.index.action = index
lang.other.view.type = "Zend_Controller_Router_Route_Static"
lang.other.view.route = "other/:slug"
lang.other.view.controller = other
lang.other.view.action = view
希望通过正确思考你需要做的事情来推动你。如果其他人知道如何动态地做,我会完全感兴趣!我将研究xml方法,看看我是否无法从糟糕的文档中解读如何正确地完成它。