Laravel 4 – Створення пакунку

8 хв. читання

Однією з найкращих речей в Laravel 4 є проектування навколо ідеї сумісності. Протягом довгого часу, керування залежностями в PHP проекті було доволі важким завданням. Копіювання та вставляння коду між проектами було страшним сном, і тримати оновлення в актуальному стані було вкрай важко. Лиш незначна кількість розробників використовувала PEAR, тому, в підсумку, в кожному проекті доводилось винаходити колесо, замість того, аби використовувати код розміщений спільнотою.

При виборі PHP фреймворка для роботи Ви мали б використовувати лише цей фреймворк в зв'язку зі складністю перенесення його компонентів. Однак, зі зростанням популярності Composer, PHP, зрештою, отримав пакетний менеджер, що вирішував ці проблеми. Laravel 4 був спроектований з нуля для роботи з Composer. Кожен з компонентів фреймворка, фактично, являється окремою залежністю, які збираються разом в одному проекті.

До того ж, Laravel 4 має вбудовані інструменти для створення нових пакунків, такі як створення красивих і легких в використанні фасадів, що дає Вам змогу створювати виразний синтаксис при роботі з Вашим пакунком.

Workbench

Laravel 4 дає змогу надзвичайно легко створювати нові пакунки. Згідно з правилами, для коректної роботи пакунку Ви маєте налаштувати в ньому файли та структуру. Це може зайняти багато часу, тому Laravel 4 дає змогу автоматично згенерувати всі ці файли за допомогою лише однієї команди інтерфейсу командного рядка artisan.

Однак, перед генерацією Вашого нового пакунка, перш за все, слід вказати деякі деталі конфігурації. Відкрийте app/config/workbench.php та заповніть своїми даними поля name та email. Ці дані будуть внесені в файл comoposer.json Вашого пакунка.

Далі ми можемо створити новий пакунок за допомогою команди інтерфейсу командного рядка artisan.

    php artisan workbench vendor/package --resources

Вам слід замінити назви vendor та package на назви які Ви хочете використовувати. **vendor** - це назва Вашої компанії або організації, або, для простоти, Ваше ім'я, а package - назва Вашого пакунку.

Наприклад, якщо я створюватиму пакунок з назвою supyo, то я виконаю наступну команду:

    php artisan workbench philipbrown/supyo --resources

Параметр --resources вказує artisan створити пакунок з кількома додатковими директоріями для Laravel. Якщо ви створюєте пакунок, що має використовуватись поза Laravel, тоді ви можете не вказувати даний параметр.

Файлова структура пакунку

Тепер, якщо Ви зайдете в vendor/workbench, то побачите каталог з згенерованим пакунком.

Перед тим як почати, не забудьте виконати команду composer install.

Якщо у Вас виникає ситуація, коли з'являється помилка "File not found", але Ви впевнені, що назву файлу та простір імен вказано вірно, то це, зазвичай, пояснюється тим, що composer не проінформований про цей файл. Щоб це виправити, Ви можете просто запустити команду composer dump- autoload. Ця команда перезапише карту класів Вашого пакунка.

Якщо Вам необхідно додати залежності в Ваш пакунок, ви можете додати їх в файл composer.json та виконати composer update, так само,як Ви б додавали залежності в Ваш головний проект.

Примітка: Всі ці команди мають бути виконані в директорії Вашого пакунка, а не в корені проекту.

Файлова структура може спочатку Вас збентежити, але Ви краще пізнаєте її, почавши працювати з PHP пакунком.

Директорія src - це місце, куди Ви додаватимете актуальний код Вашого пакунка.

В tests Ви розміщуватимете тести.

І vendor - директорія де будуть розміщені залежності.

Також Ви помітите файл composer.json. Він важливий, якщо Ви захочете розмістити Ваш пакунок на Packagist. Сюди ви вносите Ваші залежності і Composer зможе автоматично їх встановити.

Провайдер послуг пакунку (Service Provider)

Далі, якщо Ви зазирнете в директорію src, то знайдете файл провайдера послуг. В мене це:

    /workbench/philipbrown/supyo/src/Philipbrown/Supyo/SupyoServiceProvider.php

Ви можете вважати, що файл провайдера послуг є чимось на зразок персонального завантажувального файлу пакунка. Завантажувальний файл є простим файлом, який встановлює коректні параметри для запуску. Тут нам просто потрібно встановити кілька речей для того щоб Laravel знав що з ним робити.

Ваш провайдер послуг має виглядати приблизно так:

    package('philipbrown/supyo');
      }
     
      /**
       * Register the service provider.
       *
       * @return void
       */
      public function register()
      {
        //
      }
     
      /**
       * Get the services provided by the provider.
       *
       * @return array
       */
      public function provides()
      {
        return array('supyo');
      }
     
    }

Відзначте, що деякі деталі вже заповнені в методах boot() та** _provides()_.
Тепер необхідно зареєструвати наш провайдер послуг в конфігураційному файлі Laravel. Відкрийте _
app/config/app.php**_ та додайте Ваш провайдер послуг в кінець масива:

    'providers' => array(
      // --
      'Philipbrown\\Supyo\\SupyoServiceProvider',
    ),

Клас пакунка

Далі нам слід створити головний клас пакунка. Створюємо новий файл з назвою Supyo.php в тій самій директорії, що й файл SupyoServiceProvider.php:

    app['supyo'] = $this->app->share(function($app)
      {
        return new Supyo;
      });
    }

$this->app це всього лише масив який зберігає екземпляри всіх класів.
$this->app->share - замикання, що повертає екземпляр Вашого класу.

Це означає, коли Ви намагатиметесь використати цей пакунок він використає екземпляр з IoC контейнера.

Створення фасаду

Laravel використовує чудовий синтаксис, який робить написаний код чистішим та елегантнішим. На перший погляд, здається ніби Laravel всього лиш використовує статичні методи, але Laravel, фактично, витягує класи з IoC контейнера. Це все, що має бути у Вас в голові. Насправді, Вам не обов'язково розуміти як це все відбувається. Я розгляну глибини архітектури та шаблони проектування Laravel в майбутніх уроках.

Фасад дозволяє використовувати Ваш клас наступним чином:

    echo Supyo::greeting();

Це фасад, тому що, як Ви вже знаєте, це не те ж саме, що екземпляр класу, створеного нами раніше.
Для створення фасаду, перш за все, слід створити директорію Facades в директорії Вашого пакунку. Створіть в цій папці новий файл з назвою Supyo.php і зкопіюйте туди наступний код:

    app->booting(function()
    {
      $loader = \\Illuminate\\Foundation\\AliasLoader::getInstance();
      $loader->alias('Supyo', 'Philipbrown\\Supyo\\Facades\\Supyo');
    });

Щоб працювати з цим фасадом Ви маєте додати його в масив Alias конфігураційного файлу app/config/app.php.

Ваш пакунок в дії

Тепер у Вас все налаштовано, аби побачити пакунок в дії.

Відкрийте Ваш файл routes.php та додайте наступний код:

    Route::get('/test', function(){
      echo Supyo::greeting();
    });

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

Висновки

Це був широкий огляд створення пакунків в Laravel 4. Ми торкнулися кількох важливих аспектів роботи Laravel, в тому числі - як IoC забезпечує чудовий синтаксис Laravel, залишаючись при цьому легким в тестуванні.

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

Помітили помилку? Повідомте автору, для цього достатньо виділити текст з помилкою та натиснути Ctrl+Enter
Codeguida 649
Приєднався: 1 рік тому
Коментарі (0)

    Ще немає коментарів

Щоб залишити коментар необхідно авторизуватися.

Вхід