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

Я прошел через JInput Documentation .

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

JFactory::getApplication()->input;

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

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

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

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

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

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

И вот мой вопрос относительно третьего параметра.

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

8 голосов | спросил Joomler 5 AMpTue, 05 Apr 2016 10:18:24 +030018Tuesday 2016, 10:18:24

2 ответа


2

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

Вначале создайте собственный класс Jinput, например class JinputTelephone //, что вы хотите.

возможно, посмотрите в существующих классах ввода-фильтрации в /libraries /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 5 PMpTue, 05 Apr 2016 22:36:37 +030036Tuesday 2016, 22:36:37
1

Моя попытка,

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

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

PS. вы можете создать таким образом, переопределяет также основные библиотеки joomla и платформу. Такая проблема с завихрением SSL с сертификатами; )

рассматривает

ответил Lanah 19 PMpTue, 19 Apr 2016 15:15:39 +030015Tuesday 2016, 15:15:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132