JInput - отримання та фільтрація змінних запиту

Загальна інформація

Група класів Input абстрагує зовнішні дані (змінні запити), які знаходяться в суперглобальних масивах (таких як $_POST, $_GET, $_COOKIE, $_FILES) і є складовою не тільки Joomla! CMS, але й Joomla! Framework.

У CMS ця група класів розташована в /libraries/joomla/input і складається з головного класу JInput та чотирьох дочірніх класів, які його розширюють:

  • JInput – базовий клас, призначений для роботи з $_REQUEST ($_POST, $_GET і $_COOKIE), надає зручний доступ до всіх дочірніх класів та суперглобальних масивів;
  • JInputСli – клас призначений для роботи з командним рядком;
  • JInputCookie – клас призначений для роботи $_COOKIE;
  • JInputFiles – клас призначений для роботи з $_FILES;
  • JInputJson – клас призначений для роботи з JSON-даними.

Для ефективної фільтрації змінних запиту при отриманні вони використовують клас JFilterInput . Клас JFilterInput розташований у файлі /libraries/joomla/filter/input.php.

На практиці найчастіше використовується клас JInput. У Joomla 2.5 цей клас прийшов на заміну JRequest. Примірник класу (об'єкт) JInput є суспільною властивістю, яка доступна з Програми (Application). Для використання JInput необхідно викликати наступний код:

Починаючи з Joomla 3 при розробці компонента до об'єкта JInput можна звертатися не з Програми, а як до властивості input об'єкта контролера класу JControllerLegacy (якщо ваші контролери розширюють клас JControllerLegacy, а це проста практика). Тобто замість JFactory::getApplication()->input у контролері можна використовувати просто $this->input .

Отримання значення

Отримати значення з JInput можна за допомогою методуget() :

Перший параметр – це ім'я змінної у запиті, другий параметр – це значення за промовчанням, а третій параметр – це тип фільтра, який буде застосований до значення змінної. За замовчуванням фільтр налаштований на тип cmd.

Припустимо, що ми отримуємо із запиту наступний рядок:

Нижче представлені всі доступні типи фільтрів та відфільтрований за їх допомогою рядок:

  • INT, INTEGER – перше ціле число
  • UINT - перше беззнакове ціле число
  • FLOAT, DOUBLE - перше число з плаваючою точкою
  • BOOL, BOOLEAN – конвертує значення в булев тип
  • WORD – лише латинські літери та нижнє підкреслення
  • ALNUM - лише латинські літери та цифри
  • CMD - лише латинські літери, нижнє підкреслення, тире та крапка. Забирає провідні точки.
  • BASE64 - тільки латинські літери, коса риса, знак плюса і знак одно.
  • STRING – конвертує у чистий рядок, прибирає всі теги та атрибути
  • HTML – конвертує у рядок, прибирає всі HTML теги та атрибути. Під час обробки перевіряє наявність дозволених тегів/атрибутів. Якщо вони є, їх не прибирає.
  • ARRAY – конвертує масив без застосування фільтрації
  • PATH - конвертує в рядок і валідує як шлях до папки або файлу (наприклад path/to/file.png або path/to/dir). Не приймає абсолютний шлях чи шлях, який закінчується косою межею.
  • USERNAME – видаляє всі невалідні для імені користувача символи (\x00, -, \x1F, \x7F, , ", ', %, &)
  • RAW – фільтрація не застосовується. Доступний з Joomla 3.

Приклади отримання значення

Зверніть увагу, що при вказівці типу фільтра можна використовувати будь-який регістр літер.Додатково доступні магічні гетери, які є швидким доступом до типів фільтрів:

Отримання кількох значень

Для отримання відразу кількох значень можна використовувати метод getArray() :

Ви також можете встановити різні фільтри для кожної з змінних:

І можете вкладати масиви для більш складних ієрархій значень:

Отримання значень із конкретного суперглобального масиву

Клас JInput також підтримує магічний get-метод, який дозволяє отримати зручний доступ до суперглобальних масивів:

Отримання даних про файли

Формат, у якому PHP повертає дані про файли, м'яко кажучи, жахливий. Все стає ще гіршим, коли доводиться мати справу з масивом файлів. Клас JInputFiles надає зручніший інтерфейс для спрощення роботи з файлами, групуючи дані по кожному окремому файлу.

Припустимо, що у вас є така форма:

PHP передасть ці дані до глобального масиву $_FILES , який виглядатиме ось так:

А тепер спробуємо отримати ці ж дані за допомогою JInputFiles:

Ми отримаємо більш зрозумілий та зручний для роботи результат:

Встановлення значень

Для встановлення значення через JInput можна використовувати метод set() :

Перший параметр це ім'я змінної, а другий значення. Напевно, найпопулярніший приклад установки значення Joomla CMS – це блокування меню в панелі управління: