Laravel Dynami c маршрутизация для поиска - PullRequest
1 голос
/ 26 апреля 2020

Я хотел бы создать динамический c маршрут, когда пользователь нажимает кнопку Search.

Я знаю, что это можно сделать с помощью следующего GET метода

https://laravel.dev/search?q=parameter 
https://laravel.dev/search?state=XYZ&category=Automobile

Но вместо этого я хотел бы сделать следующее:

https://laravel.dev/search/state/XYZ/category/Automobile

Поэтому, если я добавлю дополнительный параметр в форму поиска, он просто добавится к URL-адресу.

Параметры могут быть необязательными, поэтому нельзя добавлять исправить маршрут в routes. Пользователь может указать штат или выполнить поиск по всем штатам.

https://laravel.dev/search/category/Automobile

Ниже приведен код моей формы поиска

<div class="jumbotron">
    <!--Search Bar-->
    {{ html()->form('GET',route('frontend.search'))->class('form-inline justify-content-center')->open() }}
    {{ html()->select('category',$categories)->class('form-control mr-sm-2') }}

    {{ html()->select('state',$states)->class('form-control mr-sm-2') }}

    <!--More filter to add later-->
    <button class="btn btn-outline-primary my-2 my-sm-0" type="submit">Search</button>

    {{ html()->form()->close() }}
</div>

Как мне этого добиться?

Спасибо

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Вы можете обработать логи c с помощью универсального маршрута с регулярными выражениями https://laravel.com/docs/7.x/routing#parameters -regular-expression-constraints

//routes.php
Route::get('search/{search?}', 'SearchController@search')
    ->where('search', '(.*)');


//controller 
class SearchController extends BaseController {

    public function search($search = null)
    {
        if ($search != null){   
            dd($search);          
        }
    }
}

Example

0 голосов
/ 26 апреля 2020

Попробуйте использовать Regex:

Route::get('search/{searchParams}', 'SearchController@search')
    ->where('searchParams', '[a-zA-Z0-9\/]+');

Вы можете положить что-нибудь на searchParams, но вам нужно разобрать его.

...