Dima Vergunov
Dima Vergunov

Reputation: 201

Laravel 5 - Method injection

How method injection works in Laravel 5(I mean implementation), can I inject parameters in custom method, not just in controller actions?

Upvotes: 7

Views: 8469

Answers (3)

maki10
maki10

Reputation: 561

Here is one more example in php 7+

class Foo {
   public function bar(Baz $baz)
   {
        $this->custom(...$baz);
   }

   protected function custom(Baz $baz, Baz2 $baz2, Baz3 $baz3)
   {
        return $baz3;
   }
}

Upvotes: 0

Muhammad Sadiq
Muhammad Sadiq

Reputation: 1155

Here is simple example of method injection,which we often used in laravel.eg

public function show(Request $request,$id){
$record = $request->find($id);
dd($record);
}

-Here we inject object of Request type,and we can inject model class object etc.

Or General Example:

class A{}
class B{
   function abc(A $obj){}
}

-so function abc of class B will accept object of Class A.
like:
$obj = new A();
$obj2 = new B();
$obj2->abc($obj);

Upvotes: 2

Marty Aghajanyan
Marty Aghajanyan

Reputation: 13389

1) Read this articles to know more about method injection in laravel 5

http://mattstauffer.co/blog/laravel-5.0-method-injection

https://laracasts.com/series/whats-new-in-laravel-5/episodes/2

2) Here is simple implementation of method injection

$parameters = [];
$reflector = new ReflectionFunction('myTestFunction');
foreach ($reflector->getParameters() as $key => $parameter) {
    $class = $parameter->getClass();
    if ($class) {
        $parameters[$key] = App::make($class->name);
    } else {
        $parameters[$key] = null;
    }
}
call_user_func_array('myTestFunction', $parameters);

you can also look at function

public function call($callback, array $parameters = [], $defaultMethod = null)

in https://github.com/laravel/framework/blob/master/src/Illuminate/Container/Container.php file for more details

3) You can use method injection for custom method

App::call('\App\Http\Controllers\Api\myTestFunction');

or for methods

App::call([$object, 'myTestMethod']);

Upvotes: 13

Related Questions