Как мне сгенерировать удобный URL-адрес в Symfony PHP?

StackOverflow https://stackoverflow.com/questions/34411

  •  09-06-2019
  •  | 
  •  

Вопрос

Я всегда склонен забывать об этих встроенных Симфония функции для создания ссылок.

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

Решение

Если ваша цель - создать удобные для пользователя URL-адреса во всем приложении, используйте следующий подход:

1) Создайте правило маршрутизации для вашего модуля / действия в файле routing.yml приложения. В следующем примере показано правило маршрутизации для действия, которое отображает самые последние вопросы в приложении, по умолчанию используется страница 1 (с использованием пейджера):

recent_questions:
   url:    questions/recent/:page
   param:  { module: questions, action: recent, page: 1 }

2) После того как правило маршрутизации установлено, используйте помощник url_for() в своем шаблоне для форматирования исходящих URL-адресов.

<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>

В этом примере будет создан следующий URL: http://myapp/questions/recent/1.html.

3) Входящие URL-адреса (запросы) будут проанализированы системой маршрутизации, и если в конфигурации правила маршрутизации будет найдено совпадение с шаблоном, именованные символы подстановки (т. е. часть :/page URL-адреса) станут параметрами запроса .

Вы также можете использовать помощник link_to() для вывода URL-адреса без использования тега HTML <a>.

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

Этот совет предназначен для symfony 1.0.Вероятно, это будет работать для более поздних версий.

В вашем классе sfAction:

строка genUrl($parameters = array(), $absolute = false)

например.$this-> getController()-> genUrl('yourmodule/youraction?ключ=значение&key2=значение', true);

В шаблоне:

Это сгенерирует обычную ссылку.

строка link_to($name, $internal_uri, $options = array());

например.link_to('Имя моей ссылки', 'yourmodule/youraction?ключ=значение&key2=значение');

Кроме того, если вы действительно хотите строку запроса с этим URL, используйте это:

link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));

В противном случае он попытается направить его как часть URL и, скорее всего, нарушит ваши действия.

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

Если вы хотите создать URL-адрес в действиях, вы можете использовать generateUrl () помощник:

$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))

Если вы хотите сгенерировать URL в шаблонах, вы можете использовать url_for () помощник:

url_for('[ModuleName]/[ActionName]', $absolute)

установите $ absolute как true / false, не забудьте использовать echo, если хотите отобразить его.

Но если вы хотите создать ссылку (что-то вроде <a href=""></a>), подойдет link_to () .

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