路线参数laravel问题

时间:2017-06-18 01:37:09

标签: laravel

我只是做了这个,但/maps/{category}/{map}无效。

将任何内容放在{category}上,显示相同的结果。

/maps/php/1
/maps/laravel/1

我希望在类别的名称和地图的ID完全匹配时显示结果,否则重定向到主页。

我的路线

Route::get('/maps/{category}', 'MapsController@index');
Route::get('/maps/{category}/{map}', 'MapsController@show');

我的控制器

public function show(Category $category, Map $map)
{        
    return view('maps.show', compact('map'));
}

我的刀片模板

{{ $map->title }}

4 个答案:

答案 0 :(得分:0)

交换路线文件中的路线,以便更具体的路线文件。

Route::get('/maps/{category}/{map}', 'MapsController@show');
Route::get('/maps/{category}', 'MapsController@index');

答案 1 :(得分:0)

Route::get('/maps/{category}', 'MapsController@index');

是一个更通用的路线,因此它匹配的不仅仅是

Route::get('/maps/{category}/{map}', 'MapsController@show');

您应首先列出节目路线。

要匹配确切的模型属性(即名称),您应该自定义路由器在路由服务提供程序引导方法中使用的解析逻辑。例如:

Route::bind('category', function ($value) {
    return App\Category::where('name', $value)->first();
});
Route::bind('map', function ($value) {
    return App\Map::where('id', $value)->first();
});

答案 2 :(得分:0)

首先,如果您使用5.4,则无需交换路由顺序,因为我从5.4开始使用laravel我不能说以前的版本。

如果要过滤询问的地图,如果它与给定的类别匹配,如果你定义了类别和地图之间的关系,你可以使用“whereHas”方法和eloquent。

“一对多(逆向)”关系是您需要使用的,请点击此处:https://laravel.com/docs/5.4/eloquent-relationships#one-to-many-inverse

查询关系是您需要知道的,请点击此处:https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-existence

您的关系在地图模型中应如何显示:

/**
 * Get the category that owns the map.
 */
 public function category()
 {
     return $this->belongsTo('App\Category');
 }

示例代码:

public function show($category, $map)
{        
    $map = Map::whereHas('category',function($query) use($category){
         $query->where('id', $category);
    });

    return view('maps.show', compact('map'));
}

答案 3 :(得分:0)

public function show($category,$map)
{        
    $category  = App\Category::where('category_name',$category);

    $map_id =App\Map::where('map_id',$map);
    if(!empty($category) && !empty($map_id))
    {
     return view('maps.show', compact('map'));
    }
    else
    {
      return view('homepage', compact('map'));
    }
}