Как создать фильтры для Jinput?

9

Я прошел через документацию JInput .

Мы можем получить доступ к объекту JInput следующим образом:

JFactory::getApplication()->input;

Если мы получаем больше значений, было бы полезно сохранить объект JInput в переменной, поэтому нам не нужно вызывать JFactory::getApplication()каждый раз, когда мы делаем это:

$jinput = JFactory::getApplication()->input;

Чтобы извлечь значение из JInput, нам нужно использовать его метод get:

$data = $jinput->get('varname', 'default_value', 'filter');

Как видите, у него есть 3 параметра:

  1. имя переменной
  2. значение по умолчанию (по умолчанию ноль)
  3. имя фильтра (по умолчанию - cmd)

И тут возникает мой вопрос относительно 3-го параметра.

Как я могу сделать свой собственный фильтр для Jinput? Например, если мне нужно проверить телефонные номера или IP-адрес, то как я могу сделать свой собственный фильтр для этого?

Joomler
источник
1
Для меня это пока «вопрос года» ... + 1
Lodder
мне тоже +1 - уже спрашивали про этот настраиваемый фильтр
Том Кушель

Ответы:

2

это довольно просто

Сначала создайте пользовательский класс Jinput, такой как class JinputTelephone// все, что вы хотите.

возможно, посмотрите существующие классы inputfilter в / library / joomla / input

// Модифицируем getter и filterMethod так, как вы хотите

/**
 * Gets a value from the input data.
 *
 * @param   string  $name     Name of the value to get.
 * @param   mixed   $default  Default value to return if variable does not exist.
 * @param   string  $filter   Filter to apply to the value.
 *
 * @return  mixed  The filtered input value.
 *
 * @since   11.1
 */
public function get($name, $default = null, $filter = 'cmd')
{
    if('phonyfilter'=== $filter){ 
    // here we ca got with static filter classes like for formvalidation  or 
    }        
    elseif (isset($this->data[$name]))
    {
        return $this->filter->clean($this->data[$name], $filter);
    }

    return $default;
}

// Применение

$phoneInput = new JinputTelephone();
$phoneInput->get('anPhoneNumber','0040','phonyfilter');

// с этим методом вы также можете использовать обычную обработку ввода // Но вы не можете использовать это с JApplication входом

Есть много других способов сделать это. Другое решение $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

тебе это помогает?

JProof
источник
1

Моя попытка,

я вижу, что у вас есть некоторый опыт работы с Joomla, поэтому я просто вложу в него свои несколько центов.

  1. вам нужно создать системный плагин
  2. вам нужно создать метод после init или аналогичный.
  3. Теперь вам нужно инициировать, JLoaderесли я не ошибаюсь, и добавить путь к библиотекам или/plugins/system/myplugin/libraries/newfilter.php
  4. включить плагин и прибыль; )

PS. Вы можете создать таким образом переопределение ядра библиотеки и платформы Joomla. Такая проблема Curl SSL с сертификатами; )

С уважением

Lanah
источник