Изменение разделительного символа в Zend URL - PullRequest
1 голос
/ 12 марта 2012

Использование Zend Framework и метода url для представления:

$this->url(array('field1' => this, 'field2' => 'is', 'field3' => 'my example'), 'route_name');

Где route_name - это имя URL-маршрута, а каждое поле # извлекается из базы данных.

Я заметил, что по умолчанию он меняет пробелы в именах контроллера / действия на знак плюс, так что это выглядело так:

www.example.com/this is my example

до

www.example.com/this+is+my+example

Я бы хотел изменить разделитель с + на - чтобы получить что-то вроде

www.example.com/this-is-my-example

Я знаю, что другой поток: Как изменить символ разделения Zend Url? как задокументирован способ сделать это, который я безуспешно пытался.

Подробное объяснение того, как это сделать, было бы очень полезно.

EDIT2: я знаю, в чем проблема, если кому-то интересно, это происходит из-за того, что URL собирается, он использует urlencode, который преобразует все ожидаемые не алфавитно-цифровые символы - и _ и пробелы как +, нет никакого способа чтобы переопределить это, чем заменить символ, создайте URL-адрес вручную (как предложил Максим) или создайте пользовательскую функцию URL-адреса, заменяющую символы (как предлагает aporat) ...

Спасибо!

Ответы [ 2 ]

1 голос
/ 13 марта 2012

Если вы действительно хотите это сделать, вы можете расширить Zend_View_Helper_Url помощник вида и добавить свою логику URL в помощник вида.

<?php
namespace Application\View\Helper;

 class MyUrl extends \Zend_View_Helper_Url
 {
    /**
     * Generates an url given the name of a route.
     *
     * @access public
     *
     * @param  array $urlOptions Options passed to the assemble method of the Route object.
     * @param  mixed $name The name of a Route to use. If null it will use the current Route
     * @param  bool $reset Whether or not to reset the route defaults with those provided
     * @return string Url for the link href attribute.
     */
     public function myUrl(array $urlOptions = array(), $name = null, $reset = false, $encode = true)
     {

     return str_replace('+', '-', parent::url($urlOptions, $name, $reset, $encode));
     }
}

, а затем просто загрузите новый помощник вида, и все готово:

        $helper = new \Application\View\Helper\MyUrl;
        $this->view->registerHelper($helper, 'myUrl');
1 голос
/ 12 марта 2012

К сожалению, вы не можете ничего установить до вызова функции url(...), чтобы добиться того, что вы хотите сделать.Причина в том, что когда URL собран, он использует функцию php urlencode(...).

Тем не менее, у вас все еще есть много вариантов:

1) Вы просто не используете *Функция 1007 * и создайте ваши URL вручную.(Лучший вариант)

2) Вы создаете новый помощник, который действует как url(...), но добавляете дополнительные изменения в функцию для достижения того, что вы хотите сделать.

3) Вы берете выводфункции url (...) и выполните str_replace, чтобы изменить + на -.(Я НЕ РЕКОМЕНДУЮ эту опцию)

Лично я создаю все свои URL вручную, чтобы избежать подобных проблем.

...