Laravel Dependency Injection

Ромчик
0

laravelДоброго времени суток. В данной статье мы поговорим о 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

Запуск seed

Давайте проверим нашу таблицу articles:

Добавленные данные, с помощью Laravel seed

У нас в таблице появилось 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.

Понравилась статья? Поделись с друзьями.
  • Add to favorites
  • Добавить ВКонтакте заметку об этой странице
  • Twitter
  • Facebook
  • Мой Мир
  • LiveJournal
  • Одноклассники
  • Блог Я.ру
  • MySpace
  • FriendFeed
  • В закладки Google
  • Google Buzz
  • Яндекс.Закладки
  • Reddit
  • StumbleUpon
  • Technorati
  • del.icio.us
  • БобрДобр
  • LinkedIn
  • Memori.ru
  • Сто закладок
  • Blogger
©2012-2017 По всем вопросам обращайтесь через форму обратной связи

Яндекс.Метрика