laravel 5.5 缺少 [路线:

laravel 5.5 Missing required parameters for [Route:

路由文件:-

Route::get('/Observation/{type}/list/{status}', 'ObservationController@index')->name('list_observation');

当前 URL : localhost:8088/hse/public/Observation/status/list/2

控制器:

protected $type ;
    protected $status ;
    public function __construct(Request $request)
    {
        $this->middleware('auth')->except('getBuildings');
        $this->status = Route::current()->parameter('status');
        $this->type = Route::current()->parameter('type');
    }

    public function index()
    {
        if ($this->status == 'all'){
        $observations = Observation::all();
        }
        else {
            $observations = Observation::where($this->Type(),$this->status)->get();
        }
       return view('observations._list')->with('observations',$observations);
    }
    public function Type(){
        switch ($this->type){
            case 'building':
                $this->type = 'building_id';
                break;
            case 'status':
                $this->type = 'status_id';
                break;
        }
        return $this->type;


    }

错误显示: [路线:list_observation] [URI:Observation/{type}/list/{status}] 缺少必需的参数。 (查看:

当我删除查询行中的 $this->Type() 方法时,错误消失了。

$this->Type() 方法的 return 值是: status_id

哪个是正确的数据库列名。

也许在 view 中的某处或您生成 URL 的地方您没有将所有必需的参数传递给路由。

我们在从 laravel 5.1 迁移到 5.6

时必须执行此操作

在寻找如何仔细解决此问题的解决方案时,我们只是将每个 slug 从 {SLUG} 替换为 {SLUG?},而不是在出现问题的地方修复每个问题。

我们正在使用路由注释 (https://github.com/LaravelCollective/annotations)。所以我们的替换 REGEX 看起来像这样:

  • 搜索:(@\b(?:Post|Get|Put|Delete|Update)\b.*\{)([^?"]*)(\}.*\n)
  • 替换:?

有人在寻找这个特定问题,需要调整正则表达式。也许有人可以在评论中解决这个问题。

这不是一个很好的解决方案,但它可以完成工作。也许这对以后的任何人都有帮助。