Symfony\Component\HttpKernel\Exception\NotFoundHttpException в Laravel 5.3

Раньше у меня были проблемы с приоритетом маршрута с подсказками и предложениями, которые я преодолел, добавив регулярное выражение в свой маршрут. Теперь мой маршрут таков:

Route::get('/{country}/{category}', ['as' => 'tour.list', 'uses' => 'LinkController@tourlist'])
            ->where('country', '[A-Za-z]+')->where('category', '[A-Za-z]+');

Route::get('/{category}/{slug}',['as' => 'single.tour', 'uses' => 'LinkController@singleTour'])
            ->where('category', '[A-Za-z]+')->where('category', '[w\d\-\_]+');

с этим маршрутом я получаю сообщение об ошибке:

Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException

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

Trying to get property of non-object 
(View: F:\project\resources\views\public\tours\show.blade.php) 

Мои методы в LinkController:

public function tourlist($country, $category){
$tour = Tour::whereHas('category', function($q) use($category) {
            $q->where('name','=', $category);
        })
        ->whereHas('country', function($r) use($country) {
            $r->where('name','=', $country);
        })
        ->get();
    return view('public.tours.list')->withTours($tour);
}

public function singleTour($slug,$category)
{
$tour = Tour::where('slug','=', $slug)
              ->whereHas('category', function($r) use($category) {
            $r->where('name','=', $category);
        })
        ->first();
   return view('public.tours.show')->withTour($tour);
}

И мой код в поле зрения:

<a href="{{ route('single.tour',['category' => $tour->category->name, 'slug' => $tour->slug]) }}">{{$tour->title}}</a>

person Zachary Dale    schedule 07.12.2016    source источник
comment
Не могли бы вы дать нам пример URL каждого маршрута? Нравится example.com/england/outdoor?   -  person scottevans93    schedule 07.12.2016
comment
@scottevans93 URL-адрес 1-го маршрута: http://localhost:8000/Croatia/Cycling URL-адрес 2-го маршрута: http://localhost:8000/Cycling/beach-side-cycling   -  person Zachary Dale    schedule 07.12.2016
comment
Оба этих URL-адреса вызывают одну и ту же ошибку HTTP?   -  person scottevans93    schedule 07.12.2016
comment
Только 2-й маршрут дает ошибку. Первый маршрут в порядке   -  person Zachary Dale    schedule 07.12.2016
comment
Должно ли where('category', '[w\d\-\_]+'); быть where('slug', '[w\d\-\_]+');?   -  person scottevans93    schedule 07.12.2016
comment
Если вышесказанное верно, ваше регулярное выражение немного неверно   -  person scottevans93    schedule 07.12.2016
comment
[A-Za-z\d\-\_]+ должен поймать слизняков   -  person scottevans93    schedule 07.12.2016
comment
Изменил мой маршрут на: Route::get('/{category}/{slug}',['as' => 'single.tour', 'uses' => 'LinkController@singleTour']) ->where('category', '[A-Za-z]+')->where('slug', '[A-Za-z\d\-\_]+'); согласно вашему предложению. Теперь ошибка Trying to get property of non-object   -  person Zachary Dale    schedule 07.12.2016
comment
Попробуйте var_dump($tour); непосредственно перед тем, как представление будет возвращено в методе singleTour(), и опубликуйте результат. Теперь это звучит так, как будто ваша модель не возвращает никаких данных   -  person scottevans93    schedule 07.12.2016
comment
Результат NULL. Это потому, что я сначала использовал категорию в маршруте и слаг в методе?   -  person Zachary Dale    schedule 07.12.2016
comment
Давайте продолжим обсуждение в чате.   -  person scottevans93    schedule 07.12.2016


Ответы (1)


Измените регулярное выражение

where('category', '[w\d\-\_]+'); to where('slug', '[A-Za-z\d\-\_]+');

Вышеизложенное решит первоначальную проблему неправильной работы маршрута.

person scottevans93    schedule 07.12.2016