Використовуйте шаблон дизайну репозиторію в додатку Laravel

Раніше я писав про те, як створити додаток із завданнями за допомогою Laravel та Vue.js. Laravel - це програма PHP для створення масштабованих веб-додатків та API. Vue.js - це сценарій Javascript і альтернатива jQuery або React.

Почніть

У цьому підручнику ми збираємося додати функціональність додатку, який ми створили в попередньому підручнику. Клоніруйте github repo, запустіть композицію, встановіть npm та підключіться до вашої бази даних.

$ mysql -uroot -p
mysql> створити базу даних laravelTaskApp;

Якщо ви застрягли в цьому пункті, перегляньте інші статті, про які я писав про встановлення MySQL та початкові налаштування Laravel. На localhost: 8000 ви можете побачити додаток, який асинхронно додає та видаляє завдання. Це означає, що він виконує операції та відображає актуальні дані без оновлення веб-сторінки.

Додаток із завданнями, який ми побудували в попередньому навчальному посібнику.

Pattern Шаблон дизайну сховища

У попередньому уроці ми писали всю свою логіку програми в контролері. Існує альтернативний підхід до розробки, який абстрагує деякі виклики в PHP-класи, які називаються Репозиторії. Ідея полягає в тому, що ми можемо від’єднати моделі від контролерів та присвоїти читані імена складним запитам.

Ми збираємось переробляти додаток, щоб використовувати шаблон сховища. Перший крок - створити файл для app / Repositories / Repository.php.

 модель = $ модель;
    }

    // Отримати всі екземпляри моделі
    публічна функція all ()
    {
        повернути $ this-> model-> all ();
    }

    // створити нову запис у базі даних
    створення публічної функції (масив $ data)
    {
        повернути $ this-> model-> create ($ data);
    }

    // оновлення запису в базі даних
    оновлення публічної функції (масив $ data, $ id)
    {
        $ record = $ this-> знайти ($ id);
        повернути $ record-> update ($ data);
    }

    // видалити запис із бази даних
    видалення публічної функції ($ id)
    {
        повернути $ this-> model-> знищити ($ id);
    }

    // показати запис із заданим ідентифікатором
    показ загальнодоступних функцій ($ id)
    {
        повернути $ this-> model-findOrFail ($ id);
    }

    // Отримати пов'язану модель
    публічна функція getModel ()
    {
        повернути $ this-> модель;
    }

    // Встановити пов'язану модель
    набір публічних функційModel (модель $)
    {
        $ this-> модель = $ модель;
        повернути $ this;
    }

    // Енергійне відношення баз даних
    публічна функція з ($ відносини)
    {
        повернути $ this-> model-> with ($ відносини);
    }
}

Цей файл визначає наш клас сховища. Примірники цього класу мають властивість моделі, яку ми прив’язуємо до красномовної моделі. Після того, як це буде пов'язано в конструкторі, ми можемо викликати красномовні методи, такі як findOrFail, update або всі з методів класу.

Розділ Інтерфейс RepositoryInterface не суворо необхідний, але це додає додаткового шару структури до нашого коду. Інтерфейс - це договір, який визначає методи, які ОБОВ'ЯЗКОВО визначені. У нашому випадку інтерфейс виглядає приблизно так:

Якщо ми створимо нові сховища, які реалізують цей інтерфейс, ми завжди будемо знати, що ці методи визначені. Інтерфейси забезпечують структуру, щоб ми знали, що потрібно робити наш код.

Повернувшись до нашого файлу TaskController.php, ми інстанціюємо сховище та передаємо в нього модель Завдання.

 model = новий репозиторій ($ завдання);
   }

   індекс публічної функції ()
   {
       повернути $ this-> model-> all ();
   }

   загальнодоступний магазин функцій (Запит $ запиту)
   {
       $ this-> валідація ($ запит, [
           'body' => 'потрібно | макс .: 500'
       ]);

       // створити запис і передати лише поля, які можна заповнити
       повернути $ this-> model-> create ($ request-> only ($ this-> model-> getModel () -> fillable));
   }

   показ загальнодоступних функцій ($ id)
   {
       повернути $ this-> model-> show ($ id);
   }

   оновлення загальнодоступних функцій (Запит $ запиту, $ id)
   {
       // оновлення моделі та передавання лише у заповнювані поля
       $ this-> model-> update ($ request-> only ($ this-> model-> getModel () -> fillable), $ id);

       повернути $ this-> model-> find ($ id);
   }

   знищення публічної функції ($ id)
   {
       повернути $ this-> model-> delete ($ id);
   }
}

Контейнер служби Laravel автоматично вирішить наші залежності і введе їх в екземпляр контролера (документи).

На даний момент наша програма працює точно так само, але наш код був відновлений для використання сховищ, і ми додали ще кілька кінцевих точок API.

Вихідний код доступний на Github

Якщо ви є кандидатом на ринку праці або стартапом, який прагне взяти на роботу в районі Бей, сміливо створіть профіль на Employbl