Реализация Zend_Locale и Zend_Translate с модулями - PullRequest
2 голосов
/ 03 декабря 2011

Я искал в Интернете хорошее решение для интеграции Zend_Locale и Zend_Translate в модульную структуру.Вот конечный путь, который я хочу:

http://url/:lang/:module/:controller/:actionhttp://url/:lang/:controller/:actionhttp://url/:module/:controller/:action <= следует использовать локаль по умолчанию </p>

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

Спасибо!

1 Ответ

0 голосов
/ 24 июля 2012

Первая проблема здесь заключается в том, что при использовании маршрутов вам нужно иметь очень специфические ограничения, чтобы сопоставить правила с таким количеством переменных.

Я предлагаю вместо принятия обоих // url /: lang /: module/: controller /: action и // url /: module /: controller /: action устанавливаются для использования только первой структуры.Таким образом, будет легче изолировать первое правило от этого действия // url /: lang /: controller /: action, имеющее только 2 правила, каждое из которых имеет разные слова (части URL).

$withModule = new Zend_Controller_Router_Route(
    ':lang/:module/:controller/:action',
    array()
);

$withoutModule = new Zend_Controller_Router_Route(
    ':lang/:controller/:action',
    array(
        'module' => 'default'
    )
);

$router->addRoute('withModule', $withModule);
$router->addRoute('withoutModule', $withoutModule);

В первом маршруте вы не указываете никаких значений по умолчанию, поэтому он не соответствует URL-адресам, предназначенным для второго, в то время как во втором маршруте вы задаете модуль по умолчанию (потому что ZF нуждается в этой информации).

Какдля третьего правила я предлагаю использовать контроллер базового предка, что-то вроде MyLib_Controller, и в его методе init () проверить, получен ли языковой параметр, как в примере ниже:

if(!$this->_getParam('lang')) {
    //this should cover the 3rd use case
    $this->_redirect('/en/' + $this->view->url(), array('exit' => true, 'prependBase' => false));
} else {
    //setup Zend_Translate
}

Другая возможность ограничивает: переменная lang только для двухбуквенных слов, но это может вызвать проблемы, и я предпочитаю ее избегать.

...