web-dev-qa-db-fra.com

Comment créer des filtres pour Jinput?

J'ai parcouru le JInput Documentation .

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 le faisons:

$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 (null par défaut)
  3. le nom du filtre (par défaut, cmd)

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

Comment puis-je créer mon propre filtre pour 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?

9
Joomler

c'est assez simple

En premier, créez une classe Jinput personnalisée telle que class JinputTelephone // tout ce que vous voulez.

peut-être, regardez dans les classes inputfilter existantes sous/libraries/joomla/input

// Modifier le getter et filterMethod à votre guise

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

// usage

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

// avec cette méthode, vous pouvez également utiliser la gestion des entrées régulière // 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?

2
JProof

Mon essai,

je vois que vous avez une certaine expérience de joomla, je vais donc y mettre mes quelques sous.

  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 JLoader si je ne me trompe pas et ajouter le chemin vers les bibliothèques a.k.a. /plugins/system/myplugin/libraries/newfilter.php
  4. activer le plugin et en tirer profit; )

PS vous pouvez créer de cette manière un remplacement également des bibliothèques et de la plate-forme joomla. Un tel problème SSL Curl avec les certs; )

cordialement

1
Lanah