Фільтрування

Огляд

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 - Початковий реліз.