【问题标题】:Route with multiple Id's (Laravel 5.2)具有多个 ID 的路由(Laravel 5.2)
【发布时间】:2016-08-25 08:19:16
【问题描述】:

我想要这样的 URI

http://localhost:8000/category/1/3

第一个 id 是 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'));
}

但是它给出了错误 Missing argument 2 for 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

【问题讨论】:

  • 我也是 laravel 新手,你在路由参数中指定问号,然后控制器中的函数指定其可选的一个类别($Category_id=null,$Food_id=null)
  • 这样会显示抱歉,找不到您要找的页面。

标签: php laravel laravel-5.2


【解决方案1】:

Anish 留下的评论是正确的,但是,当您尝试使用 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'));
 }

注意它们可能是您的视图文件中的更多错误,具体取决于您是否尝试访问。

但是,我会采用更 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

希望对您有所帮助!

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 2016-08-30
    • 2019-03-07
    • 1970-01-01
    • 2018-10-14
    • 2016-08-30
    • 2016-12-01
    • 2016-06-24
    相关资源
    最近更新 更多