Flight дозволяє вам фільтрувати методи до і після їх виклику. Немає зазначених хуків, які потрібно запам'ятовувати. Ви можете фільтрувати будь-які з методів за замовчуванням фреймворку, а також будь-які користувацькі методи, які ви налаштували.
Функція фільтра виглядає так:
function (array &$params, string &$output): bool { // Код фільтра }
Використовуючи передані змінні, ви можете маніпулювати вхідними параметрами та/або виходом.
Ви можете запустити фільтр перед методом, зробивши:
Flight::before('start', function (array &$params, string &$output): bool { // Зробіть щось });
Ви можете запустити фільтр після методу, зробивши:
Flight::after('start', function (array &$params, string &$output): bool { // Зробіть щось });
Ви можете додати скільки завгодно фільтрів до будь-якого методу. Вони будуть викликані в порядку, в якому вони оголошені.
Ось приклад процесу фільтрації:
// Співвіднести користувацький метод Flight::map('hello', function (string $name) { return "Привіт, $name!"; }); // Додати фільтр перед Flight::before('hello', function (array &$params, string &$output): bool { // Маніпулюйте параметром $params[0] = 'Фред'; return true; }); // Додати фільтр після Flight::after('hello', function (array &$params, string &$output): bool { // Маніпулюйте виходом $output .= " Гарного вам дня!"; return true; }); // Викликати користувацький метод echo Flight::hello('Боб');
Це повинно відображати:
Привіт Фред! Гарного вам дня!
Якщо ви визначили кілька фільтрів, ви можете розірвати ланцюг, повернувши false в будь-якій з ваших функцій фільтра:
false
Flight::before('start', function (array &$params, string &$output): bool { echo 'один'; return true; }); Flight::before('start', function (array &$params, string &$output): bool { echo 'два'; // Це завершить ланцюг return false; }); // Це не буде викликано Flight::before('start', function (array &$params, string &$output): bool { echo 'три'; return true; });
Зверніть увагу, що основні методи, такі як map і register, не можна фільтрувати, оскільки їх викликають безпосередньо, а не динамічно.
map
register