2016-09-02 3 views
1

Возможно ли связывать модель маршрута с использованием нескольких параметров? НапримерLaravel 5.3 привязка модели маршрута с несколькими параметрами

Веб Маршруты:

Route::get('{color}/{slug}','[email protected]'); 

Так urlwww.mysite.com/blue/shoe будет переплетены в shoe модели, которая имеет color синий.

+0

Я изменил вопрос, чтобы быть более явным. – Fusion

ответ

1

Прежде всего, он будет чувствовать себя более естественно иметь маршрут вроде следующего:

Route::get('{product}/{color}', '[email protected]'); 

и разрешить product по маршруту связывания, и просто использовать параметр color в методе контроллера непосредственно, чтобы принести например, список синих туфель.

Но давайте предположим, что по какой-то причине это требование. Я бы сделать свой маршрут немного более четко, чтобы начать с:

Route::get('{color}/{product}', '[email protected]'); 

Затем в boot методе RouteServiceProvider.php, я хотел бы добавить что-то вроде этого:

Route::bind('product', function ($slug, $route) { 
    $color = $route->parameter('color'); 

    return Product::where([ 
     'slug' => $slug, 
     'color' => $color, 
    ])->first() ?? abort(404); 
}); 

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

Вот почему я думаю, что это не имеет большого смысла, поскольку то, что вы хотите, вероятно, является списком продуктов определенного цвета, а не только одного.

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

+0

Это отвечает на вопрос. Тем не менее, я доволен, почему вы не используете метод firstOrFail() вместо abort (404)? – Fusion

+0

@Fusion, как это делается в официальном документе, я предполагаю, что 'abort (404)' возвращает правильный ответ 404. Нужно будет проверить, что именно делает 'findOrFail', не уверен, что ответ будет таким же. – osteel

+0

@Fusion только что понял, что вы имели в виду' firstOrFail'. Этот метод существует? (Не могу проверить прямо сейчас) – osteel

-1

Попробуйте изменить контроллер для этого:

class Pages extends Controller{ 

    public function single($lang, App\Page $page){ 

     dd($page); 

    } 

} 

Вы должны добавить страницу модели.

Смежные вопросы