- PVSM.RU - https://www.pvsm.ru -
В данной статье я бы хотел поделиться знаниями о том, как устроены, для чего нужны и что из себя представляют packages [1](далее пакеты) в Fuelphp [2]. Прошу помочь сравнить реализацию и возможности пакетов Fuelphp с аналогами из других фримворков. Думаю всем будет интересно узнать мнение адептов Simfony2 и Yii по этому поводу, милости просим, кидайте свои выкладки в комменты. Далее в примерах будет рассмотрен пакет fuel-ninjauth [3]
Для выполнения тех или иных повторяющихся глобальных задач, в приложении, уже давно применяется подход с использованием сервисов или же служб, что по сути одно и то же. Если просто, то сервис это объект, который выполняет какую-то глобальную задачу в контексте приложения. В Fuelphp роль таких сервисов выполняют пакеты.
Пакетами можно делиться с сообществом. Есть несколько путей инсталляции пакетов, можно просто скопировать содержимое репозитория к себе в проект, использовать composer или воспользоваться утилитой oil [4].
Обратимся к oil с командой:
$ php oil package install ninjauth
Выполним миграцию, так как данный пакет использует данные из бд:
# Создадим таблицу users если таковой ещё нет
$ oil g migration create_users username:varchar[50] password:string group:int email:string last_login:integer login_hash:string profile_fields:text created_at:int
$ oil refine migrate
# Запустим миграцию для создания в бд таблицы "authentications"
$ oil refine migrate --packages=ninjauth
Рассмотрим возможную структуру на примере пакета fuel-ninjauth [3]
В папке classes находятся классы пакета. Пример [5]
Модели также могут входить в состав классов пакета, когда пакет использует бд. Пример [6]
Контроллеры в пакетах используются реже и в основном служат для формирования представлений внутри пакета. Пример [7] В итоге вся логика контроллера может сводится к чему то подобному:
return View::forge('register', array( //register - имя представления из папки №4 views
'user' => (object) compact('username', 'full_name', 'email', 'password')
));
Конфигурация или файл с настройками пакета. Пример [8]
Пример обращения к настройкам:
Config::get('ninjauth.default_group');
В данной папке расположены классы миграций, которые нужны для быстрой сборки структуры данных в бд, создания необходимых таблиц и т.д.
В пакете могут использоваться представления. Как правило пакет обрабатывает логику и не связан с формированием представления напрямую, но иногда может оказаться, что формирование представления внутри пакета будет хорошим решением.
Пример представления:
<?php echo Form::open(null, array('id' => 'register')); ?>
<?php if (isset($error)): ?>
<span class="error"><?php echo $error; ?></span>
<?php endif; ?>
<p>
<label for="username">Username</label>
<?php echo Form::input('username', $user->username) ?>
</p>
<p>
<label for="full_name">Full Name</label>
<?php echo Form::input('full_name', $user->full_name) ?>
</p>
<p>
<label for="email">Email</label>
<?php echo Form::input('email', $user->email) ?>
</p>
<p>
<label for="password">Password</label>
<?php echo Form::password('password') ?>
</p>
<?php echo Form::submit('submit') ?>
<?php echo Form::close() ?>
Данный файл служит для описания файловой структуры пакета для автозагрузчика.
Autoloader::add_classes(array(
'NinjAuth\Controller' => __DIR__.'/classes/controller.php',
'NinjAuth\Exception' => __DIR__.'/classes/exception.php',
'NinjAuth\CancelException' => __DIR__.'/classes/exception.php',
'NinjAuth\ResponseException' => __DIR__.'/classes/exception.php',
'NinjAuth\Model_Authentication' => __DIR__.'/classes/model/authentication.php',
'NinjAuth\Strategy' => __DIR__.'/classes/strategy.php',
'NinjAuth\Adapter' => __DIR__.'/classes/adapter.php',
'NinjAuth\Adapter_SimpleAuth' => __DIR__.'/classes/adapter/simpleauth.php',
'NinjAuth\Adapter_Sentry' => __DIR__.'/classes/adapter/sentry.php',
'NinjAuth\Adapter_Warden' => __DIR__.'/classes/adapter/warden.php',
'NinjAuth\Strategy_OAuth' => __DIR__.'/classes/strategy/oauth.php',
'NinjAuth\Strategy_OAuth2' => __DIR__.'/classes/strategy/oauth2.php',
'NinjAuth\Strategy_OpenId' => __DIR__.'/classes/strategy/openid.php',
));
Важно понимать, что файлы загружаются автоматически, и только в случае использования методов пакета. Иными словами, если нигде в отработке скрипта не использовались методы пакета, то и его классы загружены не будут. Это делает ваше приложение легче и быстрее. Единственное о чем всегда знает приложение это о расположении файлов bootstrap.php:
Пакет NinjAuth является адаптером для стандартного пакета автроизации и сделать простой пример его работы будет сложновато. Поэтому возьмем пакет fueltools [9]. Он нужен для отладки кода, когда нужно быстро посмотреть что возвращает метод или переменная. Итак, допустим мы пишем сотый метод нашего приложения:
public function action_save()
{
$var1 = 'var1';
$var2 = 'var2';
$orm = Model_Test::forge()->set('one', $var1)->set('two',$var2);
FueltoolsFB::info($var1);
FueltoolsFB::info($var2);
FueltoolsFB::info($orm->save());
}
Смотрим результат выполнения данного метода в консоли Firefox:
Fuelphp загрузил только те классы пакетов ORM и FuelTools, которые требовались для отработки сценария:
Fuelphp предоставляет в виде пакетов довольно широкие возможности:
— формирование упорядоченной и понятной архитектуры приложения
— применение сервисов, как в примере с fueltools [9]
— применение паттернов и подключение дополнительного функционала к уже имеющимся пакетам, как в пакете fuel-ninjauth [3] который является адаптером к стандартному пакету Auth.
— пакеты позволяют брать на себя функции формирования представлений, а при желании в обычных контроллерах можно оставить только проверки и ввод-вывод, перенеся все остальное в пакеты.
— пакеты позволяют абстрагироваться от другого кода в приложении, его проще тестировать и подключать в другом проекте
— объекты и методы пакета становятся доступными в контексте всего приложения
— использование пакетов делает ваше приложение легче и быстрее
— пакет fuel-ninjauth [3]
— пакет fueltools [9]
— официальный репозиторий пакетов для Fuelphp github.com [10]
— репозиторий на форуме fuel-packages [11]
Автор: MaxZN
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/kohana/18198
Ссылки в тексте:
[1] packages: http://docs.fuelphp.com/general/packages.html
[2] Fuelphp: http://docs.fuelphp.com/
[3] fuel-ninjauth: https://github.com/happyninjas/fuel-ninjauth
[4] oil: http://docs.fuelphp.com/packages/oil/package.html
[5] Пример: https://github.com/happyninjas/fuel-ninjauth/blob/master/classes/strategy.php
[6] Пример: https://github.com/happyninjas/fuel-ninjauth/blob/master/classes/model/authentication.php
[7] Пример: https://github.com/happyninjas/fuel-ninjauth/blob/master/classes/controller.php
[8] Пример: https://github.com/happyninjas/fuel-ninjauth/blob/master/config/ninjauth.php
[9] fueltools: https://github.com/Maxlab/fueltools-package
[10] github.com: https://github.com/fuel-packages
[11] fuel-packages: http://fuelphp.com/forums/view/10
Нажмите здесь для печати.