Come creare filtri per Jinput?


9

Ho esaminato la documentazione di JInput .

Possiamo accedere all'oggetto JInput in questo modo:

JFactory::getApplication()->input;

Se stiamo recuperando più valori, sarebbe utile memorizzare l'oggetto JInput in una variabile, quindi non abbiamo bisogno di chiamare JFactory::getApplication()ogni volta che lo facciamo:

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

Per recuperare un valore da JInput dobbiamo usare il suo metodo get:

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

Come puoi vedere, ha 3 parametri:

  1. il nome della variabile
  2. il valore predefinito (il valore predefinito è null)
  3. il nome del filtro (il valore predefinito è cmd)

E qui arriva la mia domanda sul terzo parametro.

Come posso creare il mio filtro per Jinput? Ad esempio, se devo convalidare i numeri di telefono o l'indirizzo IP, come posso fare il mio filtro per quello?


1
Questo per me è 'questione dell'anno' finora ... + 1
Lodder

anche io, +1 - ho già chiesto di quel filtro personalizzabile
Tom Kuschel il

Risposte:


2

questo è abbastanza semplice

Innanzitutto crea una classe Jinput personalizzata come class JinputTelephone// qualunque cosa tu voglia.

forse, dai un'occhiata alle classi di inputfilter esistenti in / libraries / joomla / input

// Modifica il getter e filterMethod come desideri

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

// utilizzo

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

// con questo metodo puoi anche usare la normale gestione dell'input // Ma non puoi usarlo con JApplication come input

Esistono molti altri modi per farlo. Un'altra soluzione $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

ti aiuta?


1

Il mio tentativo,

Vedo che hai una certa esperienza con Joomla, quindi ci metterò solo i miei pochi centesimi.

  1. devi creare un plugin di sistema
  2. è necessario creare un metodo dopo init o simile.
  3. ora devi iniziare JLoaderse non sbaglio e aggiungere il percorso alle librerie aka/plugins/system/myplugin/libraries/newfilter.php
  4. abilitare plugin e profitto; )

PS. puoi creare in questo modo un override anche delle librerie e della piattaforma core di joomla. Tale problema Curl SSL con certs; )

Saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.