URL с несколькими необязательными параметрами - PullRequest
0 голосов
/ 06 октября 2018

Предположим, у меня есть страница для поиска автомобилей, страница принимает 3 необязательных параметра, brand, year и color

Пример упрощенного маршрута:

Route::get('/cars/{brand?}/{year?}/{color?}', function ($brand = NULL, $year = NULL, $color = NULL) {

    echo "brand is:".$brand."<br>";
    echo "year is:".$year."<br>";
    echo "color is:".$color."<br>";

});

Не знаюНе понимаю, как передать, например, только year параметр?

Работает, если переданы все 3 параметра, например: /cars/_/2010/_, но это очень не элегантное решение.

Какой правильный путьдля этого?

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Как сказано в официальной документации, Параметры маршрута вводятся в обратные вызовы / контроллеры маршрута в зависимости от их порядка .В этом конкретном случае единственный способ, которым Laravel должен знать, какой именно параметр вы предлагаете (см. https://laravel.com/docs/5.6/routing#route-parameters).

В любом случае, если для выполнения поиска требуется 3 параметра, вы, вероятно, могли бы подумать об изменениизапросить глагол от GET до POST и передать все из них как данные запроса POST, а не в самой строке запроса.

0 голосов
/ 06 октября 2018

Я не знаю, возможно ли это, так как вы можете передать только 2 параметра, и Laravel не сможет понять, если это brand, color или year.

Я оставлю свои два цента в отношении моего метода параметров URL, который я использую:

public function getCars(Request $request){
        Validator::validate($request->all(), [
            'brand' => 'nullable|string',
            'year' => 'nullable|integer',
            'color' => 'nullable|string'
        ]);

        $cars = Car::select('id', '...');

        if($request->has('brand')){
            // get cars with that brand
            $cars->where('brand', $request->brand);
        }

        // ... and so on with the other parameters

        $cars = $cars->paginate(10); // or $cars->get()

    }

Это довольно простой пример, поэтому вам придется настроить его под свои нужды.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...