То, что я хотел бы сделать, следуют маршрутом для текущего действия наряду с любым и всем маршрутом и параметрами строки запроса, и изменяют строковый параметр единого запроса на что-то еще. Если бы параметр устанавливается в текущем запросе, я хотел бы замененный. В противном случае я хотел бы добавленный. Существует ли помощник для чего-то вроде этого, или я должен записать свое собственное?
Спасибо!
[редактирование:] Человек, я был неясен на том, что я на самом деле хочу сделать. Я хочу генерировать URL для "этой страницы", но заменить одну из переменных. Вообразите страницу, я иду, страница с результатами поиска, которая не говорит "результатов, но попробуйте один из них", сопровождаемый набором ссылок. Ссылки содержали бы все поисковые параметры, кроме того, который я изменю на ссылку.
Редакция:
Хорошо, теперь у меня есть идея получше, чего ты хочешь. Я не знаю, лучший ли это способ, но вы можете попробовать это (на взгляд):
url_for('foo',
array_merge($sf_request->getParameterHolder()->getAll(),
array('bar' => 'barz'))
)
Если вы используете это очень часто, то я предлагаю создать вашего собственного помощника, который работает как обёртка для url_for
.
Или если вам нужен только подмножество параметров запроса, то сделайте так:
url_for('foo',
array_merge($sf_request->extractParameters(array('parameter1', 'parameter3')),
array('bar' => 'barz'))
)
(Я сформировал код таким образом для лучшей читабельности)
Original Answer:
Я не знаю, где вы хотите изменить параметр (в контроллере? ), но если у вас есть доступ к текущему sfRequest
объекту, то это должно произойти:
$request->setParameter('key', 'value')
Вы можете получить объект запроса, определив ваше действие следующим образом:
public function executeIndex($request) {
// ...
}
или this
public function executeIndex() {
$request = $this->getRequest();
}
Предложение Феликса хорошо, однако, оно потребует, чтобы вы жестко определили "текущий маршрут"...
Вы можете получить название текущего маршрута, используя:
sfRouting::getInstance()->getCurrentRouteName()
и вы можете подключить его непосредственно в url_for
, например:
url_for(sfRouting::getInstance()->getCurrentRouteName(),
array_merge($sf_request->extractParameters(array('parameter1', 'parameter3')),
array('bar' => 'barz'))
)
Надеюсь, это поможет.