¿Cómo crear filtros para Jinput?

9

He seguido con la documentación de JInput .

Podemos acceder al objeto JInput de esta manera:

JFactory::getApplication()->input;

Si estamos recuperando más valores, sería útil almacenar el objeto JInput en una variable para que no necesitemos llamar JFactory::getApplication()cada vez que hacemos eso:

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

Para recuperar un valor de JInput necesitamos usar su método get:

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

Como puede ver, tiene 3 parámetros:

  1. el nombre de la variable
  2. el valor predeterminado (el valor predeterminado es nulo)
  3. el nombre del filtro (predeterminado en cmd)

Y aquí viene mi pregunta sobre el tercer parámetro.

¿Cómo puedo hacer mi propio filtro Jinput? Por ejemplo, si tengo que validar los números de teléfono o la dirección IP, ¿cómo puedo hacer mi propio filtro para eso?

Joomler
fuente
1
Esto para mí es 'pregunta del año' hasta ahora ... + 1
Lodder
yo también, +1 - ya pregunté sobre ese filtro personalizable
Tom Kuschel

Respuestas:

2

esto es bastante simple

En primer lugar, cree una clase personalizada de Jinput como class JinputTelephone// lo que quiera.

quizás, eche un vistazo a las clases de inputfilter existentes en / bibliotecas / joomla / input

// Modifica el getter y filterMethod como quieras

/**
 * 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;
}

// uso

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

// con este método también puede usar el manejo de entrada regular // Pero no puede usarlo con JApplication una entrada

Hay muchas otras formas de hacerlo. Otra solución $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

te ayuda?

JProof
fuente
1

Mi intento

Veo que tienes algo de experiencia con Joomla, así que solo pondré mis pocos centavos.

  1. necesitas crear un complemento del sistema
  2. necesita crear un método después de init o similar.
  3. ahora necesita iniciar JLoadersi no estoy equivocado y agregar la ruta a las bibliotecas aka/plugins/system/myplugin/libraries/newfilter.php
  4. habilitar plugins y ganancias; )

PD. puede crear de esta manera una anulación de las bibliotecas y la plataforma de Joomla Core. Tal problema Curl SSL con certs; )

Saludos

Lana
fuente