#laravel #url #redirect
#laravel #url #перенаправление
Вопрос:
У меня есть приведенный ниже код, который работает хорошо, как и ожидалось, но я хотел бы перенаправить на маршрут с помощью строки запроса, в соответствии с которой condition=$vehicle->conditionamp;make={{$vehicle->make}}amp;model={{$vehicle->model}}
public function update()
{
//I've removed the logic for simplicity
return redirect(route('vehicles.show', $vehicle))->with('flash',
'Vehicle Edited Successfully');
}
Пробовал некоторые решения и некоторые ссылки, ссылающиеся на документацию, но все равно не смог заставить его работать. Любая помощь будет высоко оценена, приветствия!
Ответ №1:
Вторым параметром для route()
помощника является список параметров. Любые переданные параметры, которые не определены в самом маршруте, будут добавлены к URL в качестве параметров строки запроса.
Ваш код будет выглядеть примерно так:
return redirect(route('vehicles.show', [
$vehicle,
'condition' => $vehicle->condition,
'make' => $vehicle->make,
'model' => $vehicle->model
]))->with('flash', 'Vehicle Edited Successfully');
Комментарии:
1. Спасибо, ваш ответ и другой, приведенный здесь, решают мою проблему. Есть ли какое-либо преимущество перед другим или это просто вопрос предпочтений?
2. @AlphyGacheru Этот метод автоматически закодирует параметры запроса. Так, например, если бы в условии был амперсанд, этот метод кодировал бы его, тогда как обычная конкатенация строк — нет. Я думаю, что это немного чище. Кроме того, если вы когда-либо перемещали их в параметры маршрута, ваш код вообще не нужно было бы менять, но вероятность этого невелика.
Ответ №2:
Попробуйте объединить параметры запроса в методе перенаправления
return redirect(
route('vehicles.show', $vehicle) .
"?condition={$vehicle->condition}amp;make={$vehicle->make}amp;model={$vehicle->model}"
)
->with('flash', 'Vehicle Edited Successfully');
Более безопасным способом при объединении параметров строки запроса было бы использовать http_build_query()
функцию, как указано в комментариях @patricus
$queryString = http_build_query([
'condition' => $vehicle->condition,
'make' => $vehicle->make,
'model' => $vehicle->model
]);
return redirect(route('vehicles.show') . "?{$queryString}")
->with('flash', 'Vehicle Edited Successfully');
Комментарии:
1. Спасибо, ваш ответ и другой, приведенный здесь, решают мою проблему. Есть ли какое-либо преимущество перед другим или это просто вопрос предпочтений?
2. Не могу придумать никакого преимущества / недостатка — однако ответ @patricus, вероятно, более похож на Laravel (ish) — честно говоря, я не знал, что значения, переданные в качестве 2-го параметра функции route, будут добавляться к строке запроса, если не к параметрам маршрута — мне все же нравится, чтобы было однозначно, что это строка запросапараметры so будут придерживаться моей версии — для меня это сводится к моим собственным предпочтениям
3. @Donkarnash Если вы предпочитаете придерживаться этого метода, вы можете включить
http_build_query()
функцию, чтобы ваши параметры при необходимости получали urlencoded . Представьте$vehicle->condition
, что в параметре есть амперсанд. Без кодирования это приведет к разрыву строки запроса.