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 – це блокування меню в панелі управління: