Как передать параметры GET для Laravel с помощью метода GET?

Я застрял в этой самой простой форме, чего я не смог выполнить, и я хочу создать форму поиска с текстовым вводом и двумя элементами управления, с маршрутом, который принимает 3 параметра, проблема, когда я отправляю формы, он отображает параметры с вопросительным знаком, а не способом Laravel,

наценка

{{ Form::open(['route' => 'search', 'method' => 'GET'])}} <input type="text" name="term"/> <select name="category" id=""> <option value="auto">Auto</option> <option value="moto">Moto</option> </select> {{ Form::submit('Send') }} {{ Form::close() }} 

маршрут

  Route::get('/search/{category}/{term}', ['as' => 'search', 'uses' => 'SearchController@search']); 

Когда я отправляю форму, она перенаправляет меня на

 search/%7Bcategory%7D/%7Bterm%7D?term=asdasd&category=auto 

Как я могу передать эти параметры на мой маршрут с помощью Laravel и без Javascript! : D

Самый простой способ – только принять входящий запрос и вытащить нужные переменные в контроллере:

 Route::get('search', ['as' => 'search', 'uses' => 'SearchController@search']); 

а затем в SearchController@search :

 class SearchController extends BaseController { public function search() { $category = Input::get('category', 'default category'); $term = Input::get('term', false); // do things with them... } } 

По умолчанию вы можете установить значения по умолчанию в Input::get() если в действие вашего контроллера не передано ничего.

Как говорит joe_archer , нет необходимости вставлять эти термины в URL-адрес, и это может быть лучше как POST (в этом случае вам следует обновить свой вызов Form::open() а также ваш маршрут поиска в routes.php – Input::get() остается тем же)

Я тоже боролся с этим и, наконец, получил его на работу.

routes.php

 Route::get('people', 'PeopleController@index'); Route::get('people/{lastName}', 'PeopleController@show'); Route::get('people/{lastName}/{firstName}', 'PeopleController@show'); Route::post('people', 'PeopleController@processForm'); 

PeopleController.php

 namespace App\Http\Controllers ; use DB ; use Illuminate\Http\Request ; use App\Http\Requests ; use Illuminate\Support\Facades\Input; use Illuminate\Support\Facades\Redirect; public function processForm() { $lastName = Input::get('lastName') ; $firstName = Input::get('firstName') ; return Redirect::to('people/'.$lastName.'/'.$firstName) ; } public function show($lastName,$firstName) { $qry = 'SELECT * FROM tableFoo WHERE LastName LIKE "'.$lastName.'" AND GivenNames LIKE "'.$firstName.'%" ' ; $ppl = DB::select($qry); return view('people.show', ['ppl' => $ppl] ) ; } 

люди / show.blade.php

 <form method="post" action="/people"> <input type="text" name="firstName" placeholder="First name"> <input type="text" name="lastName" placeholder="Last name"> <input type="hidden" name="_token" value="{{ csrf_token() }}"> <input type="submit" value="Search"> </form> 

Заметки:
Мне нужно было передать два поля ввода в URI.
Я пока не использую Eloquent, если это так, отрегулируйте логику базы данных соответственно.
И я не сделал, чтобы пользователь вводил данные, так что простуда.
Обратите внимание на поле скрытой формы «_token», и все «использование» включает, они необходимы.

PS: Вот еще один синтаксис, который, кажется, работает, и не нуждается в

 use Illuminate\Support\Facades\Input; 

,

 public function processForm(Request $request) { $lastName = addslashes($request->lastName) ; $firstName = addslashes($request->firstName) ; //add more logic to validate and secure user entered data before turning it loose in a query return Redirect::to('people/'.$lastName.'/'.$firstName) ; } 

У меня была такая же проблема. Мне нужно показать URL-адрес поисковой системы

Я использую два таких маршрута

 Route::get('buscar/{nom}', 'FrontController@buscarPrd'); Route::post('buscar', function(){ $bsqd = Input::get('nom'); return Redirect::action('FrontController@buscarPrd', array('nom'=>$bsqd)); }); 

Сначала для отображения URL-адреса, как мы хотим

Второй, используемый формой и перенаправляющий на первый

Итак, вы пытаетесь найти поисковый запрос и категорию в URL?

Я бы посоветовал против этого, так как вам придется иметь дело с многословными поисковыми терминами и т. Д., И может закончиться всевозможными неприятностями с запрещенными символами.

Я бы предложил POSTing данные, дезинфицируя его, а затем возвращая страницу результатов.

Маршрутизация Laravel не предназначена для приема запросов GET из форм, она предназначена для использования URL-сегментов в качестве параметров получения и построена вокруг этой идеи.

Альтернативно, если вы хотите указать ожидаемые параметры в сигнатуре действия, но передайте их как произвольные аргументы GET . Используйте фильтры, например:

Создать маршрут без параметров:

 $Route::get('/history', ['uses'=>'ExampleController@history']); 

Задайте действие с двумя параметрами и прикрепите фильтр:

 class ExampleController extends BaseController { public function __construct($browser) { $this->beforeFilter('filterDates', array( 'only' => array('history') )); } public function history($fromDate, $toDate) { /* ... */ } } 

Фильтр, который переводит GET в аргументы действия:

 Route::filter('filterDates', function($route, Request $request) { $notSpecified = '_'; $fromDate = $request->get('fromDate', $notSpecified); $toDate = $request->get('toDate', $notSpecified); $route->setParameter('fromDate', $fromDate); $route->setParameter('toDate', $toDate); }); 

Альтернативой решению msturdy является использование доступного вам метода поддержки запросов .

Это работает точно так же, без необходимости импортировать пространство имен Input use Illuminate\Support\Facades\Input в верхней части вашего контроллера.

Например:

 class SearchController extends BaseController { public function search() { $category = request('category', 'default'); $term = request('term'); // no default defined ... } }