Laravel Dependency Injection
Доброго времени суток. В данной статье мы поговорим о Dependency Injection или внедрение зависимостей в Laravel. О DI вы можете прочитать в официальной документации по Laravel. А в этой мы остановимся на примерах использования внедрения зависимостей. И так, приступим.
Первое, что нам надо сделать это подготовить проект. Как устанавливать и настраивать я не буду описывать в этой статье, тем более это вы можете прочитать в статьях на моем блоге: «Создание CMS на Laravel: создание виртуального хоста, установка и настройка проекта» или в интернет.
У нас есть база данных lara, в ней таблица articles.
Есть модель Article:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { protected $table = 'articles'; protected $fillable = [ 'title', 'content', ]; }
Давайте заполним таблицу данными.
Для этого создадим seeder.
В консоли вводим следующую команду:
php artisan make:seeder ArticlesTableSeeder
Теперь откроем только, что созданный seeder и добавим в него следующий код:
<?php use Illuminate\Database\Seeder; use App\Article; class ArticlesTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $i = 0; while ($i<10){ $i++; Article::create([ 'title' => str_random(15), 'content' => str_random(100), ]); } } }
И в database\seeds\DatabaseSeeder.php в метод run добавим:
$this->call(ArticlesTableSeeder::class);
Теперь давайте запустим наш seeder. Для этого вводим следующую команду:
php artisan db::seed
Давайте проверим нашу таблицу articles:
У нас в таблице появилось 10 записей.
И у нас есть контроллер ArticleController с одним методом inde, который выводит все записи.
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Article; class ArticleController extends Controller { public function index() { $art = new Article; $articles = $art->all(); dd($articles); } }
И есть роут:
Route::get('/', 'ArticleController@index');
И если мы перейдем на наш сайт (в моем случае http://lara.loc), то увидим список статей.
Внедрение зависимостей в Laravel (Dependency Injection)
Внедрение зависимостей – это термин, который означает внедрение классов в этот класс через конструктор или метод класса.
Давайте в наш класс ArticleController внедрим класс Aricle через конструктор. Для этого изменим код нашего контроллера:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Article; class ArticleController extends Controller { protected $art; public function __construct(Article $articles) { $this->art = $articles; } public function index() { $articles = $this->art->all(); dd($articles); } }
Проверим. Перейдем на lara.loc. И увидим список статей.
Давайте теперь внедрим зависимость в метод index нашего контроллера. Для этого изменим код контроллера:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Article; class ArticleController extends Controller { public function index(Article $art) { $articles = $art->all(); dd($articles); } }
И если мы перейдем на http://lara.loc/, то увидим список статей.
Заключение.
Мы с вами добавили класс Article в другой класс ArticleController, используя внедрение зависимостей в Laravel. Таким образом мы можем в один класс добавить другие классы. Dependency Injection в Laravel позволяет нам упростить и ускорить разработку приложений на Laravel.