Reputation: 53
I am developing a web application by Laravel5, and in code of Controller, I wrote a code bellow.
public function show($id)
{
$post = Post::find($id);
\View::share(compact('post'));
return view('posts.show');
}
but, I want to write as follows.
public function show(Post $post)
{
\View::share(compact('post'));
return view('posts.show');
}
and in RouteServiceProvider.php
, I added Router $router
public function boot(Router $router)
{
but, it doesn't work, and I got an error bellow.
Declaration of App\Providers\RouteServiceProvider::boot(App\Providers\Router $router) should be compatible with Illuminate\Foundation\Support\Providers\RouteServiceProvider::boot()
What is problem? Thanks!
Upvotes: 5
Views: 5089
Reputation: 21681
You should try like:
Please put use Route;
instead of use App\Providers\Router;
and try
Or you can also use the app('router')->pattern()
.
For more details please follow this link.
Upvotes: 0
Reputation: 4915
boot
method is inherited from Illuminate\Foundation\Support\Providers\RouteServiceProvider
which doesn't have the same signature as yours which is causing this error.
If you have to use the router inside boot
method then use app()
helper function to get the instance of the router.
public function boot()
{
$router = app('router'); // Router Instance
parent::boot();
}
Upvotes: 1
Reputation: 361
What laravel
version do you use?
In version newer than 5.3, you have to write as follows.
public function boot()
{
//
parent::boot();
Route::model('post', \App\Post::class);
}
Reference:
https://readouble.com/laravel/5.3/en/routing.html
https://readouble.com/laravel/5.2/en/routing.html
Explicit Binding
section.
Upvotes: 4