具有Zend和多语言支持的路由问题模块化应用程序

时间:2010-09-22 15:22:40

标签: php zend-framework zend-route

我正在与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>

你有想法吗?

提前谢谢你, 托比亚斯

1 个答案:

答案 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方法,看看我是否无法从糟糕的文档中解读如何正确地完成它。