morontt.info

Zend Framework → Аналог Url-хелпера из Zend_View

В своё время меня интересовал вопрос - как вызывать Url-хелпер из контроллера и внутри модели? И если в контроллере это можно было сделать просто, то внутри модели получал только фигу. Однако догадался заглянуть в код самого фреймворка (Zend Framework, если что) - там всё чёрным по белому написано.

Зачем мне вообще это понадобилось? А затем, что пути к страницам этого сайта определены через роуты и если мне завтра вздумается заменить адреса вида example.org/topic/xxx на example.org/shmopic/xxx, то придётся переписывать модели для получения RSS-фида и генерации sitemap.xml, что не есть хорошо.

А теперь немного кода

Было:

public static function createSitemap()
{   
    $baseUrl = 'http://' . $_SERVER['HTTP_HOST'];

    //...кучка кода

    foreach ($arrayTopic as $value) {
        $url = $baseUrl . '/topic/' . $value['post_id'];
        
        //...другая кучка кода
    }
    //...третья кучка кода
}

Стало:

public static function createSitemap()
{   
    $baseUrl = 'http://' . $_SERVER['HTTP_HOST'];
    $router = Zend_Controller_Front::getInstance()->getRouter();

    //...кучка кода

    foreach ($arrayTopic as $value) {
        $url = $baseUrl . $router->assemble(array('id' => $value['post_id']),
                                            'topic', false, true);
        //...другая кучка кода
    }
    //...третья кучка кода
}

Вот, собственно, и всё :)

g-plus-icon
comments powered by Disqus
Учтите, что комментарии добавляются только при включённом JavaScript в браузере. В ином случае информация хоть и не пропадёт бесследно, но будет отправлена в спам и вряд ли хоть кто-нибудь её увидит.
Wilen
avatar
Great stuff, you hpeled me out so much!
Ответить
Gemini
avatar
If I were a Teeange Mutant Ninja Turtle, now I'd say "Kowabunga, dude!"
Ответить
lazyants
avatar
Thanx a lot
Ответить
morontt
avatar
you are welcome :)
Ответить
4 комментария Написать что-нибудь
Поля, помеченные asterisk, обязательны для заполнения.
Адрес электронной почты нигде не отображается, необходим только для обратной связи.
Веб-сайт вводите в формате http://example.org, при желании, конечно.