Фільтрування
Огляд
Flight дозволяє вам фільтрувати відображені методи до та після їх виклику.
Розуміння
Немає заздалегідь визначених хуків, які вам потрібно запам'ятовувати. Ви можете фільтрувати будь-які стандартні методи фреймворку, а також будь-які власні методи, які ви відобразили.
Функція фільтра виглядає так:
/**
* @param array $params Параметри, передані методу, що фільтрується.
* @param string $output (лише для буферизації виводу v2) Вивід методу, що фільтрується.
* @return bool Поверніть true/void або не повертайте нічого, щоб продовжити ланцюжок, false, щоб перервати ланцюжок.
*/
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 "Hello, $name!";
});
// Додайте фільтр перед
Flight::before('hello', function (array &$params, string &$output): bool {
// Маніпулюйте параметром
$params[0] = 'Fred';
return true;
});
// Додайте фільтр після
Flight::after('hello', function (array &$params, string &$output): bool {
// Маніпулюйте виводом
$output .= " Have a nice day!";
return true;
});
// Викличте власний метод
echo Flight::hello('Bob');
Це повинно відобразити:
Hello Fred! Have a nice day!
Якщо ви визначили кілька фільтрів, ви можете перервати ланцюжок, повернувши false
в будь-якій з ваших функцій фільтра:
Flight::before('start', function (array &$params, string &$output): bool {
echo 'one';
return true;
});
Flight::before('start', function (array &$params, string &$output): bool {
echo 'two';
// Це завершить ланцюжок
return false;
});
// Це не буде викликано
Flight::before('start', function (array &$params, string &$output): bool {
echo 'three';
return true;
});
Примітка: Основні методи, такі як
map
іregister
, не можна фільтрувати, оскільки вони викликаються безпосередньо і не викликаються динамічно. Дивіться Розширення Flight для отримання додаткової інформації.
Див. також
Вирішення проблем
- Переконайтеся, що ви повертаєте
false
зі своїх функцій фільтра, якщо хочете, щоб ланцюжок зупинився. Якщо ви нічого не повертаєте, ланцюжок продовжиться.
Журнал змін
- v2.0 - Початковий реліз.