Wie erstelle ich Filter für Jinput?

9

Ich habe die JInput-Dokumentation durchgearbeitet .

Wir können wie folgt auf das JInput-Objekt zugreifen:

JFactory::getApplication()->input;

Wenn wir mehr Werte abrufen, ist es hilfreich, das JInput-Objekt in einer Variablen zu speichern, damit wir nicht JFactory::getApplication()jedes Mal aufrufen müssen, wenn wir dies tun:

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

Um einen Wert aus JInput abzurufen, müssen Sie die get-Methode verwenden:

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

Wie Sie sehen können, hat es 3 Parameter:

  1. der Variablenname
  2. der Standardwert (standardmäßig null)
  3. der Filtername (standardmäßig cmd)

Und hier kommt meine Frage zum 3. Parameter.

Wie kann ich meinen eigenen Filter erstellen Jinput? Wenn ich beispielsweise Telefonnummern oder IP-Adressen überprüfen muss, wie kann ich dann meinen eigenen Filter dafür erstellen?

Joomler
quelle
1
Dies ist für mich bisher 'Frage des Jahres' ... + 1
Lodder
Ich auch, +1 - bereits nach diesem anpassbaren Filter gefragt
Tom Kuschel

Antworten:

2

das ist ganz einfach

Erstellen Sie zunächst eine benutzerdefinierte Jinput-Klasse wie class JinputTelephone// was auch immer Sie möchten.

Vielleicht sehen Sie sich die vorhandenen Eingabefilterklassen unter / library / joomla / input an

// Ändern Sie den Getter und die Filtermethode nach Ihren Wünschen

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

// Verwendungszweck

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

// Mit dieser Methode können Sie auch die reguläre Eingabebehandlung verwenden. // Sie können sie jedoch nicht mit JApplication als Eingabe verwenden

Es gibt viele andere Möglichkeiten, dies zu tun. Eine andere Lösung $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

hilft es dir

JProof
quelle
1

Mein Versuch,

Ich sehe, dass Sie einige Erfahrung mit Joomla haben, also werde ich nur meine paar Cent hineinstecken.

  1. Sie müssen ein System-Plugin erstellen
  2. Sie müssen eine Methode nach init oder ähnlichem erstellen.
  3. Jetzt müssen Sie initiieren, JLoaderwenn ich nicht falsch liege, und Pfad zu Bibliotheken hinzufügen aka/plugins/system/myplugin/libraries/newfilter.php
  4. Plugin und Profit aktivieren; )

PS. Auf diese Weise können Sie auch Joomla-Kernbibliotheken und -Plattformen überschreiben. Ein solches Curl-SSL-Problem mit Zertifikaten; )

Grüße

Lanah
quelle