Как разработчик PHP, вы можете быть заинтересованы в работе с фреймворками. Фреймворки пытаются упростить процесс разработки путем упрощения общих практик, используемых в большинстве веб-проектов, таких как пакеты, модули, плагины и даже компоненты (CakePHP).
Возможно, в процессе разработки вы чувствуете, что заново изобретаете колесо, например, при создании приложения аутентификации или капчи. В этом случае вам нужно создать пакет, который упростит и сделает разработку вашего приложения быстрее и проще.
Есть два типа пакетов; некоторые являются независимыми от фреймворка (автономными), а другие — для конкретной фреймворк . Этот учебник будет охватывать исключительно пакеты Laravel.
Перед созданием пакета вам необходимо знать о менеджерах пакетов. PEAR — это хорошо известный менеджер пакетов PHP, который, хотя и доступен, используется редко. Почему? Это заставило вас устанавливать пакеты для всей системы, а не для каждого отдельного проекта. Композитор стал преемником PEAR.
Что такое пакеты Laravel?
Одним из параметров для масштабирования мощности фреймворка является то, как разработчик перераспределяет полезные пакеты кода. Это позволяет разработчикам объединять приложения в несколько пакетов небольших приложений.
Действительно, пакеты предлагают отличный способ сгруппировать связанный код. Пакеты очень похожи на «Компоненты». Важно отметить, что исходный код Laravel является «пакетом», который Тейлор Отвелл называет DEFAULT_BUNDLE
.
Одним из больших преимуществ пакетов Laravel является то, что они предоставляют доступ ко всем функциям, которые инфраструктура предлагает своему хост-приложению, включая маршрутизацию, миграции, тесты, представления и многие другие полезные функции. Другим важным преимуществом пакета является принцип СУХОЙ (не повторяй себя). Создавая пакет для кода, который вы часто используете, вы экономите ресурсы и повышаете производительность вашего приложения.
Теперь давайте представим несколько полезных пакетов Laravel. Пакеты, которые я использовал, включают в себя:
- Генераторы : Одна из вещей, которые мне понравились в CakePHP, была его функция Bake. Это самая близкая вещь, которую я нашел в любой другой среде.
- Ярый : Самопроверкаемые интеллектуальные модели для Eloquent ORM.
- Помощник IDE . Этот пакет пытается исправить проблему с автозавершение кода в PhpStorm , создав файл помощника docblock, из которого IDE может получить подсказки.
- Sayakb : Это приносит вам отличное приложение с капчей.
- Behat : решение для тестирования вашего приложения с использованием методологии BDD.
- Артдарек : Отличная OAuth-оболочка.
- Макамара : Простая локализация i18n для вашего приложения Laravel.
Вы можете найти упаковочную способность, которая вам нужна в packalyst . Packalyst создает простой и социальный реестр пакетов для Laravel.
Как создать свой собственный пакет Laravel
Создайте простой пакет аутентификации для Laravel 5.0. Для этого прежде всего вам нужен файл composer.json
для вашего нового пакета:
json { "name": "alireza/myauth", "description": "How create your laravel 5 package", "license": "MIT", "authors": [ { "name": "Alireza Rahmani khalili", "email": "[email protected]" } ], "minimum-stability": "dev", "require": { "laravel/framework": "~5.0" }, "autoload": { "psr-4": { "Alireza\\Authentication\\": "src/" } } }
Класс Service Provider — это просто файл, который все правильно настраивает для пакета. Вот как должен выглядеть поставщик услуг в этом месте в src/MyAuthServiceProvider.php
:
« `php namespace Alireza \ Authentication; использовать Illuminate \ Support \ ServiceProvider;
класс MyAuthServiceProvider расширяет ServiceProvider {
/ ** * Указывает, отложена ли загрузка провайдера. * * @var bool * / защищенный $ defer = false; / ** * Загрузите события приложения. * * @turn void * / публичная функция boot () { } / ** * Зарегистрируйте поставщика услуг. * * @turn void * / регистр публичной функции () { } / ** * Получить услуги, предоставляемые поставщиком. * * @return array * / публичная функция обеспечивает () { возвращение []; }
} « `
Добавьте поставщика услуг в config/app.php
:
php 'Alireza\Authentication\MyAuthServiceProvider ::class',
Теперь Laravel знает о пакете. Вы можете спросить об «псевдониме» и почему я не добавляю его в свой app.php
. Лично я добавляю псевдоним в метод register класса поставщика услуг вместо того, чтобы добавлять его вручную в файл конфигурации Laravel. Я займусь этим позже. Теперь создайте простой класс PHP с именем MyAuth
в src/MyAuth.php
:
« `php namespace Alireza \ Authentication;
использовать Config, Request, Session, Hash; использовать приложение \ пользователь;
Class MyAuth {public $ redirect_login = ‘/ users / home’; public $ redirect_logout = ‘/ users / logout’; public $ login = ‘/ user / login’; защищенные данные;
публичная функция __construct () { if (Request :: isMethod ('post')) // Получить входные данные $ this-> data = array ('username' => Input :: get ('username'), 'password' => Input :: get ('password')); } публичная функция входа в систему ($ data = false) { $ this-> data = $ data; if ($ this-> data &&! is_array ($ this-> data)) return redirect ($ this-> login) -> with ('message', 'извините, нет массива для входа в систему вручную') -> send (); if ($ this-> data &&! Session :: has ('user')) { $ result = User :: Where (['email' => $ this-> data ['username'] ]) -> первый (); if ($ result && Hash :: check ($ this-> data ['password'], $ result-> password)) { Session :: put ('user', $ result); return Redirect ($ this-> redirect_login) -> with ('message', 'Welcome успешный вход в систему') -> send (); } Session :: вровень (); возврат перенаправления ($ this-> login) -> with ('message', 'Login Failed, неверное имя пользователя или пароль') -> send (); } } публичная функция выхода из системы () { Session :: вровень (); возврат перенаправления ($ this-> login) -> with ('message', 'logout success') -> send () }
}
« `
Класс аутентификации должен связываться с IoC-контейнером Laravel с поставщиком услуг пакета. Перед этим создайте класс Facade, который позволит использовать методы класса без необходимости создавать новый экземпляр, а также другие преимущества, которые были указаны ранее. Так же, как класс MyAuth создал новый каталог Facades в каталоге Facades, создайте новый класс PHP и назовите его src/MyAuthFacade.php
:
php namespace Alireza\Authentication; use Illuminate\Support\Facades\Facade; class MyAuthFacade extends Facade { protected static function getFacadeAccessor() { return 'MyAuth'; } }
После этого остается только загрузить пакет. Моя выглядит так:
php public function register() { $this->app['MyAuth'] = $this->app->share(function($app) { return new MyAuth; }); $this->app->booting(function() { $loader = \Illuminate\Foundation\AliasLoader::getInstance(); $loader->alias('MyAuth', 'Alireza\Authentication\MyAuthFacade'); }); }
Как видите, я связал класс Myauth с контейнером IoC. Теперь легко использовать класс MyAuth:
php MyAuth::login(['username'=>'[email protected]','password'=>'test']);
Это должно сгенерировать сообщение: Welcome log-in succeeded.
При желании вы можете теперь зарегистрировать свой пакет в Packagist . Пакет MyAuth теперь зарегистрирован и может быть легко включен в Laravel с помощью команды composer: composer require "alireza/myauth"
.
Вывод
Если вы ищете пример популярного, зрелого пакета Laravel, вы можете проверить TerranetAdmin для Laravel.
Это был краткий обзор того, как создать пакет Laravel 5. Как видите, создать пакет легко, и он может стать важным инструментом для упрощения и ускорения процесса разработки.