Як створити фільтри для 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-адресу, то як я можу зробити власний фільтр для цього?


1
Це для мене поки "питання року" ... + 1
Лодер

мені теж +1 - вже запитували про той налаштований фільтр
Том Кушель

Відповіді:


2

це досить просто

Спочатку створіть спеціальний клас Jinput, наприклад class JinputTelephone// що завгодно.

можливо, придивіться до існуючих класів inputfilter у розділі / бібліотеки / 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'));

це вам допомагає?


1

Моя спроба,

я бачу, що у вас є досвід роботи з Joomla, тому я просто вкладу свої кілька центів у це.

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

PS. Ви можете створити таким чином переопределення основних Joomla бібліотек та платформи. Така проблема Curl SSL з certs; )

з повагою

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.