I have error:
{"message":"Unresolvable dependency resolving [Parameter #0 [ <required> $app ]] in class Illuminate\\Support\\ServiceProvider","status_code":500,"debug":
{"line":850,"file":"\/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php","class":"Illuminate\\Contracts\\Container\\BindingResolutionException","trace":["#0 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(817): Illuminate\\Container\\Container->resolveNonClass(Object(ReflectionParameter))","#1 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(788): Illuminate\\Container\\Container->getDependencies(Array, Array)","#2 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(644): Illuminate\\Container\\Container->build('App\\\\Providers\\\\N...', Array)","#3 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Application.php(211): Illuminate\\Container\\Container->make('App\\\\Providers\\\\N...', Array)","#4 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(231): Laravel\\Lumen\\Application->make('App\\\\Providers\\\\N...', Array)","#5 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(746): Illuminate\\Container\\Container->Illuminate\\Container\\{closure}(Object(Laravel\\Lumen\\Application), Array)","#6 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(644): Illuminate\\Container\\Container->build(Object(Closure), Array)","#7 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Application.php(211): Illuminate\\Container\\Container->make('App\\\\Contracts\\\\N...', Array)","#8 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(864): Laravel\\Lumen\\Application->make('App\\\\Contracts\\\\N...')","#9 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(819): Illuminate\\Container\\Container->resolveClass(Object(ReflectionParameter))","#10 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(788): Illuminate\\Container\\Container->getDependencies(Array, Array)","#11 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/container\/Container.php(644): Illuminate\\Container\\Container->build('App\\\\Http\\\\Contro...', Array)","#12 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Application.php(211): Illuminate\\Container\\Container->make('App\\\\Http\\\\Contro...', Array)","#13 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Route.php(318): Laravel\\Lumen\\Application->make('App\\\\Http\\\\Contro...')","#14 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Route.php(180): Dingo\\Api\\Routing\\Route->makeControllerInstance()","#15 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Route.php(163): Dingo\\Api\\Routing\\Route->mergeControllerProperties()","#16 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Route.php(142): Dingo\\Api\\Routing\\Route->setupRouteProperties(Object(Dingo\\Api\\Http\\Request), Array)","#17 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Router.php(713): Dingo\\Api\\Routing\\Route->__construct(Object(Dingo\\Api\\Routing\\Adapter\\Lumen), Object(Laravel\\Lumen\\Application), Object(Dingo\\Api\\Http\\Request), Array)","#18 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Router.php(691): Dingo\\Api\\Routing\\Router->createRoute(Array)","#19 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Router.php(701): Dingo\\Api\\Routing\\Router->getCurrentRoute()","#20 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Http\/Middleware\/PrepareController.php(43): Dingo\\Api\\Routing\\Router->current()","#21 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/pipeline\/Pipeline.php(137): Dingo\\Api\\Http\\Middleware\\PrepareController->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#22 [internal function]: Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#23 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Routing\/Pipeline.php(32): call_user_func(Object(Closure), Object(Dingo\\Api\\Http\\Request))","#24 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/pipeline\/Pipeline.php(104): Laravel\\Lumen\\Routing\\Pipeline->Laravel\\Lumen\\Routing\\{closure}(Object(Dingo\\Api\\Http\\Request))","#25 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(647): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))","#26 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(493): Laravel\\Lumen\\Application->sendThroughPipeline(Array, Object(Closure))","#27 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(467): Laravel\\Lumen\\Application->handleFoundRoute(Array)","#28 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(398): Laravel\\Lumen\\Application->handleDispatcherResponse(Array)","#29 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(650): Laravel\\Lumen\\Application->Laravel\\Lumen\\Concerns\\{closure}()","#30 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(400): Laravel\\Lumen\\Application->sendThroughPipeline(Array, Object(Closure))","#31 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Adapter\/Lumen.php(103): Laravel\\Lumen\\Application->dispatch(Object(Dingo\\Api\\Http\\Request))","#32 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Routing\/Router.php(574): Dingo\\Api\\Routing\\Adapter\\Lumen->dispatch(Object(Dingo\\Api\\Http\\Request), 'v1')","#33 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Http\/Middleware\/Request.php(123): Dingo\\Api\\Routing\\Router->dispatch(Object(Dingo\\Api\\Http\\Request))","#34 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/pipeline\/Pipeline.php(151): Dingo\\Api\\Http\\Middleware\\Request->Dingo\\Api\\Http\\Middleware\\{closure}(Object(Dingo\\Api\\Http\\Request))","#35 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/pipeline\/Pipeline.php(104): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Dingo\\Api\\Http\\Request))","#36 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Http\/Middleware\/Request.php(124): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))","#37 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/dingo\/api\/src\/Http\/Middleware\/Request.php(100): Dingo\\Api\\Http\\Middleware\\Request->sendRequestThroughRouter(Object(Dingo\\Api\\Http\\Request))","#38 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/pipeline\/Pipeline.php(137): Dingo\\Api\\Http\\Middleware\\Request->handle(Object(Dingo\\Api\\Http\\Request), Object(Closure))","#39 [internal function]: Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))","#40 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Routing\/Pipeline.php(32): call_user_func(Object(Closure), Object(Illuminate\\Http\\Request))","#41 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/illuminate\/pipeline\/Pipeline.php(104): Laravel\\Lumen\\Routing\\Pipeline->Laravel\\Lumen\\Routing\\{closure}(Object(Illuminate\\Http\\Request))","#42 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(647): Illuminate\\Pipeline\\Pipeline->then(Object(Closure))","#43 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(400): Laravel\\Lumen\\Application->sendThroughPipeline(Array, Object(Closure))","#44 \/Users\/dmitriy\/Sites\/laravel_test\/vendor\/laravel\/lumen-framework\/src\/Concerns\/RoutesRequests.php(341): Laravel\\Lumen\\Application->dispatch(NULL)","#45 \/Users\/dmitriy\/Sites\/laravel_test\/public\/index.php(28): Laravel\\Lumen\\Application->run()","#46 {main}"]}}
Hello, i was trying to bind interface and supply service provider to controller but it returns error
// code in register method. This works
$this->app->bind(NumberInterface::class, function($app) {
return new NumberServiceProvider($app);
});
// needed code in register method. NOT WORKING
$this->app->bind(NumberInterface::class, NumberServiceProvider::class);
$app->register(App\Providers\NumberServiceProvider::class);NumberInterface $numberProvider as argumentI guess your NumberServiceProvider::__construct accepts a non-typed $app instance. This means that Laravel cannot automatically resolve it. Try typing it; public function __construct(Application $app) with the proper use-statement.
Thanks, that worked. But why thats not documented? Docs say that we should use Illuminate\Support\ServiceProvider for extending but it has not type in construct for $app.
@kLkA This is documented.
Alternatively, and importantly, you may simply "type-hint" the dependency in the constructor of a class that is resolved by the container, including controllers, event listeners, queue jobs, middleware, and more. In practice, this is how most of your objects should be resolved by the container.
Source: https://laravel.com/docs/5.3/container#automatic-injection
@sisve Probably we misunderstood each other. I listed in first message a number of points. And point No.3 Controller receives NumberInterface $numberProvider as argument. So i automatically injecting interface which $numberProvider implements.
I know that I'm not implementing exact realisation of Class.
I'm trying to perform that:
https://laravel.com/docs/5.3/container#binding-interfaces-to-implementations
but for Lumen. And there in docs nothing said about intentional injection of Application component into ServiceProvider. Maybe its because Type of "Application" of Lumen different from Laravel "Application" ?
The documentation is correct and relevant.
$app parameter and cannot proceed. Error: "Unresolvable dependency resolving [Parameter #0 [ Adding a type-hint to $app means that step 4 has the type information needed to proceed. It can then resolve the type that NumberServiceProvider wants and pass it into the constructor to create the NumberServiceProvider instance.
Am i getting you right that when we need to create ServiceProvider via code
public function register()
{
$this->app->bind(NumberInterface::class, NumberServiceProvider::class);
}
we always have to override parent __constructor($app) with __constructor(Application $app) ?
Correct, and call parent::__construct($app); in your __construct.
When i was talking about "not documented" part i meant that:
https://laravel.com/docs/5.3/providers#the-register-method
There is an example of using $this->app in register method without any mention that user has to supply Application $app in constructor.
So exact code in laravel will throw error as in this issue
Why is this closed? I agree with @kLkA .
1) This should be documented.
2) php artisan make:provider MyServiceProvider should generate such constructor (it does not)
Or the parent constructor should specify type.
$factory->define(App\Post::class, function(Faker\Generator $faker){
return [
'title' => $faker->sentence(6),
'content' => $faker->paragraph(10),
'user_id' => function() {
return factory(\App\User::class)->create()->id;
}
];
});
And this is my post table
public function up()
{
Schema::create('posts', function (Blueprint $table) {
$table->increments('id');
$table->string('title', 100);
$table->text('content');
$table->integer('user_id');
$table->timestamps();
});
}
This is ioc container 101 stuff. Constructors aren't usually needed for providers. If you need one, then obviously you need to typehint anything that has to be resolved out if the container.
Most helpful comment
When i was talking about "not documented" part i meant that:
https://laravel.com/docs/5.3/providers#the-register-method
There is an example of using $this->app in register method without any mention that user has to supply
Application $app in constructor.So exact code in laravel will throw error as in this issue