Как мне сгенерировать удобный URL-адрес в Symfony PHP?
Вопрос
Я всегда склонен забывать об этих встроенных Симфония функции для создания ссылок.
Решение
Если ваша цель - создать удобные для пользователя 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 () .