2017-08-12 71 views
1

我正在开发一个Laravel5的Web应用程序,并且在Controller的代码中,我写了一段代码。Laravel5`RouteServiceProvider``应该与`兼容错误

public function show($id) 
{ 
    $post = Post::find($id); 
    \View::share(compact('post')); 
    return view('posts.show'); 
} 

但是,我想写如下。

public function show(Post $post) 
{ 
    \View::share(compact('post')); 
    return view('posts.show'); 
} 

RouteServiceProvider.php,我加Router $router

public function boot(Router $router) 
{ 

但是,它不工作,我得到了一个错误波纹管。宣言 软件\供应商\ RouteServiceProvider ::启动程序(App \供应商\ $路由器路由器) 应与 照亮\基金会的\ Support \提供商兼容\ RouteServiceProvider ::启动()

什么是问题? 谢谢!

回答

0

boot方法继承自Illuminate\Foundation\Support\Providers\RouteServiceProvider,它与您的签名没有相同的签名,导致此错误。

如果您必须使用boot方法中的路由器,然后使用app()辅助函数来获取路由器的实例。

public function boot() 
{ 
    $router = app('router'); // Router Instance 

    parent::boot(); 
} 
+0

感谢您的回答! 正如你所说,使用'app('router') - > model('post','App \ Post');',它非常完美! 'Route :: model('post',\ App \ Post :: class);'也是如此。 – hiel

+0

@hiel是的。两者是做不同的方式做同样的事情是“从拉拉维尔的国际奥委会容器解决实例”。 –

+0

@hiel'Route :: model'是** Facade **方式,'app('router')'是** Helper **方式。 –

0

你应该尝试这样的:

请把use Route;,而不是使用App\Providers\Router;并尝试

OR

您也可以使用app('router')->pattern() ...

欲了解更多详情,请按照此link

希望为你工作!!!