Comment créer des filtres pour Jinput?

9

J'ai parcouru la documentation JInput .

Nous pouvons accéder à l'objet JInput comme ceci:

JFactory::getApplication()->input;

Si nous récupérons plus de valeurs, il serait utile de stocker l'objet JInput dans une variable afin que nous n'ayons pas besoin d'appeler à JFactory::getApplication()chaque fois que nous faisons cela:

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

Pour récupérer une valeur de JInput, nous devons utiliser sa méthode get:

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

Comme vous pouvez le voir, il a 3 paramètres:

  1. le nom de la variable
  2. la valeur par défaut (par défaut null)
  3. le nom du filtre (par défaut cmd)

Et voici ma question concernant le 3ème paramètre.

Comment puis-je créer mon propre filtre Jinput? Par exemple, si je dois valider des numéros de téléphone ou une adresse IP, comment puis-je créer mon propre filtre pour cela?

Joomler
la source
1
Pour moi, c'est la «question de l'année» jusqu'à présent ... + 1
Lodder
moi aussi, +1 - déjà posé des questions sur ce filtre personnalisable
Tom Kuschel

Réponses:

2

c'est assez simple

Dans un premier temps, créez une classe Jinput personnalisée telle que class JinputTelephone// ce que vous voulez.

peut-être jetez un œil dans les classes inputfilter existantes sous / bibliothèques / joomla / input

// Modifiez le getter et le filterMethod comme vous le souhaitez

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

// utilisation

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

// avec cette méthode, vous pouvez également utiliser la gestion d'entrée standard // Mais vous ne pouvez pas l'utiliser avec JApplication une entrée

Il existe de nombreuses autres façons de le faire. Une autre solution $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

ça vous aide?

JProof
la source
1

Mon essai,

je vois que vous avez une certaine expérience avec joomla donc je vais juste y mettre mes quelques cents.

  1. vous devez créer un plugin système
  2. vous devez créer une méthode après init ou similaire.
  3. maintenant vous devez lancer JLoadersi je ne me trompe pas et ajouter un chemin vers les bibliothèques aka/plugins/system/myplugin/libraries/newfilter.php
  4. activer le plugin et le profit; )

PS. vous pouvez créer de cette façon une surcharger les bibliothèques et la plateforme de base trop joomla. Un tel problème SSL Curl avec les certificats; )

Cordialement

Lanah
la source