Фильтрация
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 "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
, не могут быть фильтрованы, потому что
они вызываются непосредственно и не динамически вызываются.