Существует ли помощник Symfony для получения текущего URL действия и изменения одного или нескольких параметров запроса?

То, что я хотел бы сделать, следуют маршрутом для текущего действия наряду с любым и всем маршрутом и параметрами строки запроса, и изменяют строковый параметр единого запроса на что-то еще. Если бы параметр устанавливается в текущем запросе, я хотел бы замененный. В противном случае я хотел бы добавленный. Существует ли помощник для чего-то вроде этого, или я должен записать свое собственное?

Спасибо!

[редактирование:] Человек, я был неясен на том, что я на самом деле хочу сделать. Я хочу генерировать URL для "этой страницы", но заменить одну из переменных. Вообразите страницу, я иду, страница с результатами поиска, которая не говорит "результатов, но попробуйте один из них", сопровождаемый набором ссылок. Ссылки содержали бы все поисковые параметры, кроме того, который я изменю на ссылку.

6
задан Rytmis 5 January 2010 в 15:30
поделиться

2 ответа

Редакция:

Хорошо, теперь у меня есть идея получше, чего ты хочешь. Я не знаю, лучший ли это способ, но вы можете попробовать это (на взгляд):

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();
}
5
ответ дан 17 December 2019 в 00:10
поделиться

Предложение Феликса хорошо, однако, оно потребует, чтобы вы жестко определили "текущий маршрут"...

Вы можете получить название текущего маршрута, используя:

sfRouting::getInstance()->getCurrentRouteName()

и вы можете подключить его непосредственно в url_for, например:

url_for(sfRouting::getInstance()->getCurrentRouteName(), 
         array_merge($sf_request->extractParameters(array('parameter1', 'parameter3')),
                     array('bar' => 'barz'))
)

Надеюсь, это поможет.

1
ответ дан 17 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: