Статьи

Шаблон репозитория в Ларавел 5

Шаблон репозитория был впервые представлен Эриком Эвансом в его книге «Проектирование на основе доменов» . Репозиторий фактически является точкой входа для доступа приложения к уровню домена .

Проще говоря, хранилище позволяет всему вашему коду использовать объекты без необходимости знать, как эти объекты сохраняются. Хранилище содержит все знания о постоянстве, включая отображение из таблиц в объекты. Это обеспечивает более объектно-ориентированное представление персистентного уровня и делает код отображения более инкапсулированным.

Единственный способ заставить ваши репозитории работать в Laravel (как настоящий репозиторий — книга Эрика Эванса по управлению доменами) — это изменить ORM по умолчанию с активной записи на преобразователь данных. Лучшая замена — Доктрина .

Doctrine — это ORM (объектно-реляционное отображение), которое реализует шаблон отображения данных и позволяет четко отделить бизнес-правила приложения от уровня персистентности базы данных. Доктрина использует DQL, а не SQL. DQL предоставляет вам язык объектных запросов, что означает, что вместо традиционного термина реляционных запросов у вас будут запросы в терминах объекта.

Он позволяет вам писать запросы к базе данных объектно-ориентированным способом и помогает, когда вам нужно выполнить запрос к базе данных способом, который не может быть достигнут с использованием методов репозитория по умолчанию. На мой взгляд, DQL — самый мощный способ поддерживать связь с вашей базой данных.

Объекты Doctrine — это простой простой PHP-класс, который не добавляет накладных расходов на любое наследование ORM. Doctrine управляет несколькими запросами с одним и тем же наследованием, не затрагивая базу данных, то есть объект сущности существует для всего запроса.

Другой приятной особенностью Doctrine является то, что вместо переноса файлов для создания схемы базы данных автоматически создается база данных, отражающая метаданные в аннотациях сущностей. С другой стороны, Eloquent менее сложен и очень прост в использовании.

Полное сравнение между этими двумя потребует отдельной статьи. Как вы можете видеть, объект Doctrine легче и более абстрактен. Тем не менее, Doctrine подойдет только для конкретных проектов, поэтому иногда может оказаться слишком трудоемким. Я считаю, что программист должен выбрать лучший ORM для приложения.

Теперь пришло время создать приложение для блога с Laravel. Во-первых, нам нужно создать Доктрину. Существует мост для соответствия существующей конфигурации Laravel 5. Чтобы установить Doctrine 2 в нашем проекте Laravel, мы запускаем следующую команду:

bash composer require laravel-doctrine/orm

Как обычно, пакет должен быть добавлен в app/config.php в качестве поставщика услуг:

php LaravelDoctrine\ORM\DoctrineServiceProvider::class,

Псевдоним также должен быть настроен:

php 'EntityManager' => LaravelDoctrine\ORM\Facades\EntityManager::class

Наконец, мы публикуем конфигурацию пакета с:

bash php artisan vendor:publish --tag="config"

Теперь мы закончили.

Объекты являются важными частями приложения App\Entities\Post.php :

« `PHP

Пространство имен App \ Entity;

используйте Doctrine \ ORM \ Mapping в качестве ORM;

/ ** * @ORM \ Entity * @ORM \ Table (name = ”posts”) * @ORM \ HasLifecycleCallbacks () * / class Post {/ ** * @var integer $ id * @ORM \ Column (name = » id ”, type =” integer ”, unique = true, nullable = false) * @ORM \ Id * @ORM \ GeneratedValue (стратегии =” AUTO ”) * * / private $ id;

Теперь пришло время создать репозиторий , который был описан ранее. App/Repositories/PostRepo.php :

« `php namespace App \ Repository;

используйте App \ Entity \ Post; использовать Doctrine \ ORM \ EntityManager; класс PostRepo {

« `

Контроллер: App/Http/Controllers/PostController.php :

« `php namespace App \ Http \ Controllers; используйте App \ Repository \ PostRepo в качестве репозитория; используйте App \ Validation \ PostValidator;

класс PostController extends Controller {private $ repo;

Как вы видите, я использовал Flash Helper для управления сообщениями (вы можете использовать Laravel). Что касается Validator, я должен добавить, что вы можете создать свой собственный (как я) или использовать Laravel по умолчанию, в зависимости от ваших предпочтений.

Просмотр файлов такой же, как обычно. В этом примере представления файл выглядит как resources/views/admin/edit.blade.php :

« `PHP

@if (Session :: has (‘flash_notification.message’))

{!! Session :: get (‘flash_notification.message’) !!}

@endif

@if ($ errors-> имеет ())

@foreach ($ errors-> all () как $ error)

  • {!! $ error !!}

@endforeach

@endif

{!! ‘заглавие’ !!}

 

{!! «Тело» !!}

 

Маршрутизация и другие операции будут как обычно.

Теперь вы видите, как вы можете легко создать хранилище на основе Doctrine в Laravel 5.0, что даст множество преимуществ.

Для тех из вас, кто только начинает работать с Laravel или хочет расширить свои знания, сайт или приложение с помощью расширений, у нас есть множество вещей, которые вы можете изучить на Envato Market .