2015-01-13 5 views
4

Как метод инъекции работает в Laravel 5 (я имею в виду реализацию), можно ли вводить параметры в пользовательский метод, а не только в действия контроллера?Laravel 5 - Метод инъекции

ответ

9

1) Прочитайте эти статьи, чтобы узнать больше о инъекции методы в Laravel 5

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

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

2) Вот простая реализация инъекции метода

$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); 

Вы можете также посмотреть на функции

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

в https://github.com/laravel/framework/blob/master/src/Illuminate/Container/Container.php файл для более подробной информации

3) Вы можете использовать инъекции метод для пользовательского метода

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

или для методов

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

Вот простой пример инъекции метод, который мы часто используется в laravel.eg

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

-Вот мы вводим объект типа запроса, и мы можем придать модели класса объекта и т.д.

Или общий пример:

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);