Маршрутно-проблемное модульное приложение с поддержкой Zend и мультиязычности - PullRequest
1 голос
/ 22 сентября 2010

Я борюсь с Zend-Router. Я хочу связать язык в моем URL. Все отлично работает, но моя модульная маршрутизация.

Если я вызываю: http://domain.de/en/index - выполняется действие indexAction моего IndexController модуля по умолчанию.

То же самое касается: http://domain.de/en/about Так называется aboutAction IndexController.

Если я позвоню: http://domain.de/en/forum/index, он должен выполнить indexAction IndexController модуля форума. Но это не так.

Моя цель - максимально сократить мои URL, чтобы в нем не было «по умолчанию» или «индекса».

Можете ли вы помочь мне отредактировать мой route.xml, чтобы я получил желаемые результаты?

myways.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 Ответ

1 голос
/ 22 сентября 2010

Я не слишком хорош в 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>

Я не уверен на 100% в части about, особенно в цепочке, но в беспорядкес этим должен дать вам правильный путь.

РЕДАКТИРОВАТЬ

Ниже приведен в такте, как еще один возможный пример.Я думаю, что у меня есть правильный ответ выше.

Глядя на Руководство по Zend Routes , очень сложно понять, как его настроить.Мне также не нравится работать в формате 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 и посмотрю, не смогу ли я понять, как это сделать правильно, из ужасной документации.

...