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

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

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

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

Было:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
<?php

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

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

    foreach ($arrayTopic as $value) {
        $url = $baseUrl . '/topic/' . $value['post_id'];

        //...другая кучка кода
    }
    //...третья кучка кода
}

Стало:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php

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
        );
        //...другая кучка кода
    }
    //...третья кучка кода
}

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

Комментарии

avatar
Wilen
avatar
Great stuff, you hpeled me out so much!
ответить
avatar
Gemini
avatar
If I were a Teeange Mutant Ninja Turtle, now I'd say "Kowabunga, dude!"
ответить
avatar
lazyants
avatar
Thanx a lot
ответить
avatar
morontt
avatar
you are welcome :)
ответить
4 комментария Написать что-нибудь
Адрес электронной почты нигде не отображается, необходим только для обратной связи.