WedX - журнал о программировании и компьютерных науках

Маршрут с несколькими идентификаторами (Laravel 5.2)

Я хочу такой URI

https://localhost:8000/category/1/3

Первый идентификатор — это Category_id, а второй — Food_id.

Мой маршрут:

Route::get('category/{Category_id?}/{Food_id?}', 'DetailsController@categ');

И в контроллере у меня есть:

public function categ($Category_id,$Food_id)
{
     $category = Categories::with('food')->findOrFail($Category_id);
     $food = Food::with('restaurant','categories')->findOrFail($Food_id); 
     return view('category', compact('category','food'));
}

Но выдает ошибку Отсутствует аргумент 2 для App\Http\Controllers\Detailscontroller::categ(). Может ли кто-нибудь сказать, в чем проблема. Я новичок в laravel. Что я хочу сделать, это сначала показать продукты питания на основе category_id, а затем показывает детали продуктов в соответствии с food_id.

Для отображения соответствующей категории продуктов, на мой взгляд, у меня есть

@foreach ($Category as $categories) 
 <a  href="category/{{$categories->Category_id}}">{{$categories->CategoryName}} </a>
@endforeach 

и он показывает мне продукты питания. Затем я хочу, когда я нажимаю на любой продукт питания, он показывает мне детали на основе food_id. поэтому мой вид nxt выглядит так:

 @foreach ($category->food as $food)
 <a  href="category/{{$food->Category_id}}/{{$food->Food_id}}">{{  $food->FoodName }}</a>
 @endforeach
25.08.2016

  • я также новичок в laravel, вы указываете вопросительный знак в параметре маршрута, затем функция в контроллере указывает свою необязательную категорию ($Category_id=null,$Food_id=null) 25.08.2016
  • При этом отображается сообщение Извините, страница, которую вы ищете, не найдена. 25.08.2016

Ответы:


1

Комментарий, оставленный Анишем, был правильным, однако основная проблема возникнет, когда вы попытаетесь найти модели с null. Чтобы обойти это, у вас может быть что-то вроде:

public function categ($Category_id,$Food_id)
{
      $category = is_null($Category_id) ? []: Categories::with('food')->findOrFail($Category_id);
      $food = is_null($Food_id) ?  [] : Food::with('restaurant','categories')->findOrFail($Food_id); 
      return view('category', compact('category','food'));
 }

NB В вашем файле просмотра может быть больше ошибок, в зависимости от того, пытаетесь ли вы получить доступ.

Однако я бы выбрал гораздо более RESTful-подход: https://laravel.com/docs/5.2/controllers#restful-resource-controllers

По сути, это будет означать наличие контроллера для вас. Категории:

public function index() {
    //Code to get all categories (if you have a lot you may want to paginate them)
}

public function show($Category_Id) {
    $category = Categories::with('food')->findOrFail($Category_id);

    //etc
}

а затем контроллер для вас Foods только с методом show():

public function show($Food_Id) {
    $food = Food::with('restaurant','categories')->findOrFail($Food_id);
}

ИЛИ в зависимости от того, как вы настроили свой маршрут, вы также можете включить категорию, если вам нужно (но если это просто отношение one2Many, это может быть избыточным), поэтому у вас будет

public function show($category_ID, $Food_Id) //etc

Тогда ваши маршруты будут настроены следующим образом:

Route::get('categories', 'CategoriesController@index');
Route::get('categories/{$category_id}', 'CategoriesController@show');

//Assuming you go with the first option - something like:
Route::get('foods/{$food_id}', 'FoodsController@show');

//Assuming you go with the section option for Foods
Route::get('categories/{$category_id}/{$food_id}', 'FoodsController@show');

Очевидно, что это всего лишь пример, так что не стесняйтесь настраивать контроллеры/маршруты так, как вам нравится.

Если вы в конечном итоге пойдете по маршруту RESTful (рекомендуется), вы можете посмотреть: https://laravel.com/docs/5.2/routing#route-model-binding

Надеюсь, это поможет!

25.08.2016
Новые материалы

Как создать диаграмму градиентной кисти с помощью D3.js
Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


Для любых предложений по сайту: wedx@cp9.ru