Автозавантаження є концепцією в PHP, де ви вказуєте директорію або директорії для завантаження класів. Це набагато вигідніше, ніж використовувати require або include для завантаження класів. Це також є вимогою для використання пакетів Composer.
require
include
За замовчуванням будь-який клас Flight автоматично завантажується завдяки composer. Однак, якщо ви хочете автозавантажити власні класи, ви можете використовувати метод Flight::path(), щоб вказати директорію для завантаження класів.
Flight
Flight::path()
Припустимо, у нас є дерево директорій, як наведено нижче:
# Приклад шляху /home/user/project/my-flight-project/ ├── app │ ├── cache │ ├── config │ ├── controllers - містить контролери для цього проекту │ ├── translations │ ├── UTILS - містить класи лише для цього застосунку (це все в верхньому регістрі для прикладу далі) │ └── views └── public └── css └── js └── index.php
Ви, мабуть, помітили, що це та сама структура файлів, що і на цьому сайті документації.
Ви можете вказати кожну директорію для завантаження так:
/** * public/index.php */ // Додати шлях до автозавантажувача Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); /** * app/controllers/MyController.php */ // не потрібна неймспейсінг // Всіх автозавантажених класів рекомендується використовувати Pascal Case (кожне слово з великої літери, без пробілів) // Починаючи з 3.7.2, ви можете використовувати Pascal_Snake_Case для ваших імен класів, запустивши Loader::setV2ClassLoading(false); class MyController { public function index() { // зробіть щось } }
Якщо ви маєте неймспейси, це стає дуже простим для реалізації. Вам слід використовувати метод Flight::path(), щоб вказати кореневу директорію (не кореневу директорію документа чи папку public/) вашого застосунку.
public/
/** * public/index.php */ // Додати шлях до автозавантажувача Flight::path(__DIR__.'/../');
Тепер ваш контролер може виглядати так. Посмотріть на приклад нижче, але зверніть увагу на коментарі для важливої інформації.
/** * app/controllers/MyController.php */ // неймспейси є обов'язковими // неймспейси є такими ж, як структура директорій // неймспейси повинні відповідати такому ж регістру, як структура директорій // неймспейси та директорії не можуть містити жодних підкреслень (якщо не встановлено Loader::setV2ClassLoading(false)) namespace app\controllers; // Всіх автозавантажених класів рекомендується використовувати Pascal Case (кожне слово з великої літери, без пробілів) // Починаючи з 3.7.2, ви можете використовувати Pascal_Snake_Case для ваших імен класів, запустивши Loader::setV2ClassLoading(false); class MyController { public function index() { // зробіть щось } }
І якщо ви хочете автозавантажити клас у вашій директорії утиліт, ви будете робити в основному те ж саме:
/** * app/UTILS/ArrayHelperUtil.php */ // неймспейс повинен відповідати структурі директорії та регістру (зауважте, що директорія UTILS у верхньому регістрі // як у дереві файлів вище) namespace app\UTILS; class ArrayHelperUtil { public function changeArrayCase(array $array) { // зробіть щось } }
Починаючи з 3.7.2, ви можете використовувати Pascal_Snake_Case для ваших імен класів, запустивши Loader::setV2ClassLoading(false);. Це дозволить вам використовувати підкреслення в ваших іменах класів. Це не рекомендується, але це доступно для тих, хто це потребує.
Loader::setV2ClassLoading(false);
/** * public/index.php */ // Додати шлях до автозавантажувача Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); Loader::setV2ClassLoading(false); /** * app/controllers/My_Controller.php */ // не потрібна неймспейсінг class My_Controller { public function index() { // зробіть щось } }