Обработка пользовательского ввода в Joomla, начиная с 2.5 (JInput)
На замену классу JRequest в Joomla начиная с версии 2.5 приходит класс JInput. Класс JRequest отныне считается устаревшим и не рекомендуется его использовать.
Хотя в Joomla 2.5.x все ещё много мест где используется устаревший класс JRequest и никто не помешает вам его использовать!
Класс JRequest окончательно убран в Joomla 4. ЗДРАВСТВУЙ ГЕММОРОЙ,
Для использования JInput достаточно вызвать следующий код:
$jinput = JFactory::getApplication()->input;
Для того что бы установить какое то значение для переменной в объекте $jinput служит метод set($name, $value), нам нужно передать два параметра в метод: имя переменной и значение.
Например в административной части главное меню блокируется таким кодом:
$jinput = JFactory::getApplication()->input; $jinput->set( 'hidemainmenu', true );
Для получения данных через класс JInput существует метод
get($name, $default, $type)
Где:
$name - имя переменной
$default - значение по умолчанию
$type - тип фильтрации
Метод универсальный через него можно получить и отфильтровать любой тип данных который будет указан в переменной $type например:
$jinput = JFactory::getApplication()->input; $jinput->get( 'id', 1, 'INT );
Но также в классе JInput есть синоним этого метода
$jinput = JFactory::getApplication()->input; $jinput->getInt( 'id', 1 );
Этот метод выполняет все тоже что и $jinput->get( 'id', 1, 'INT ); но только в нем уже указан тип фильтрации!
Ниже привожу таблицу типов фильтрации, для чего каждая предназначена и синоним для этого типа:
Тип | Значение | Синоним |
---|---|---|
INT или INTEGER | Целочисельная переменная | getInt($name, $default) |
UINT | Беззнаковое целое число | getUint($name, $default) |
FLOAT или DOUBLE | Числа с плавающей точкой | getFloat($name, $default) |
BOOL или BOOLEAN | Будевые типы переменных | getBool($name, $default) |
WORD | Только одно слово! Тоесть перменная со значением 'word1 word2' будет преобразованна в 'wordword' | getWord($name, $default) |
ALNUM | Вернет переменную в которой будут только числа и буквы | getAlnum($name, $default) |
CMD | Значение для командной переменной, например если мы хотим определить какой сейчас вид или задача. | getCmd($name, $default) |
BASE64 | Получение строки зашифрованной с помощью base64 | getBase64($name, $default) |
STRING | Получение строки | getString($name, $default) |
HTML | Получение HTML кода, все потенциально опасные теги удаляются! Список тегов которые не пропускает эта функция: 'applet', 'body', 'bgsound', 'base', 'basefont', 'embed', 'frame', 'frameset', 'head', 'html', 'id', 'iframe', 'ilayer', 'layer', 'link', 'meta', 'name', 'object', 'script', 'style', 'title', 'xml' | getHtml($name, $default) |
PATH | Путь к файлу или папке | getPath($name, $default) |
ARRAY | Массив | getArray(array $vars, $datasource = null) |
USERNAME | Имя пользователя | getUsername($name, $default) |
Тип фильтрации регистронезависим, так что вы можете написать хоть INT хоть int хоть InT и все равно все будет работать!
Естественно класс Jinput содержит функционал для работы с файлами. Для того что бы получать файлы для их последующей обработки рассмотрим пример формы:
<form action="?" method="post" enctype="multipart/form-data"> <input type="file" name="jform[file]"> <input type="submit"> </form>
Что бы получить файл из переменной JForm[file] нужно написать следующий код:
$jinput = JFactory::getApplication()->input; $files = $jinput->files->get( 'jform', array(), 'array' );
В переменой $files будут все загруженный файлы из массива jform
Получение значений массивов.
$varValuesArray = $jinput->getArray(array(‘var1′ => ”, ‘var2′ => ”, ‘var3′ => ”));
$post = $jinput->getArray($_POST); $value = (int) $post['value'];
Или такой вариант
$jinput = JFactory::getApplication()->input; $paramrequest = $jinput->getArray($_POST)+$jinput->getArray($_GET);