Как мне создать удобный URL-адрес в PHP Symfony?
Я всегда склонен забывать эти встроенные функции symfony для создания ссылок.
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>
.
Этот совет предназначен для symfony 1.0. Вероятно, это будет работать для более поздних версий.
В пределах вашего класса sfAction:
Строка genUrl($параметры = массив(), $абсолют = ложь)
Например. $this->getController()->genurl ('вашмодуль/ваше действие?ключ=значение&ключ2=значение', истина);
В шаблоне:
Это создаст обычную ссылку.
Строка link_to($name, $internal_uri, $options =массив());
Например. link_to('Мое имя ссылки', 'вашмодуль/ваше действие?ключ=значение&ключ2=значение');
Кроме того, если вам действительно нужна строка запроса с этим 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() подойдет.