Вопрос

Используя 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? как задокументирован способ сделать это, который я безуспешно пробовал.

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

РЕДАКТИРОВАТЬ 2:Я знаю, в чем проблема, если кому-то интересно, это связано с тем, как собирается url-адрес, он использует urlencode, который преобразует все не буквенно-цифровые символы expect - и _ и пробелы в +, нет способа переопределить это, кроме как заменить символ, создающий url вручную (как предложил Максим) или создайте пользовательскую функцию url, заменяющую символы (как предлагает aporat)...

Спасибо!

Это было полезно?

Решение

Если вы действительно хотите сделать это, вы можете продлить вспомогательный вид на акции 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');
.

Другие советы

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

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

1) Вы просто не используете url(...) работайте и создавайте свои URL-адреса вручную.(Лучший вариант)

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

3) Вы берете выходные данные функции url(...) и выполняете str_replace изменить + с -.(Я НЕ рекомендую этот вариант)

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top