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


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

Author: andyuk, 2008-08-29

4 answers

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

1) Создайте правило маршрутизации для вашего модуля/действия в маршрутизации приложения.файл 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>.

 9
Author: Jamey, 2008-08-30 15:08:25

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

В пределах вашего класса sfAction:

Строка genUrl($параметры = массив(), $абсолют = ложь)

Например. $this->getController()->genurl ('вашмодуль/ваше действие?ключ=значение&ключ2=значение', истина);

В шаблоне:

Это создаст обычную ссылку.

Строка link_to($name, $internal_uri, $options =массив());

Например. link_to('Мое имя ссылки', 'вашмодуль/ваше действие?ключ=значение&ключ2=значение');

 1
Author: andyuk, 2008-08-29 15:02:37

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

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

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

 0
Author: thrashr888, 2008-12-16 18:26:07

Вы можете сгенерировать 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() подойдет.

 0
Author: priyabagus, 2011-11-08 14:34:46