Jak utworzyć filtry dla Jinput?

9

I przeszły z Dokumentacją JInput .

Możemy uzyskać dostęp do obiektu JInput w następujący sposób:

JFactory::getApplication()->input;

Jeśli pobieramy więcej wartości, dobrze byłoby przechowywać obiekt JInput w zmiennej, więc nie musimy dzwonić za JFactory::getApplication()każdym razem, gdy to robimy:

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

Aby pobrać wartość z JInput, musimy użyć jej metody get:

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

Jak widać, ma 3 parametry:

  1. nazwa zmiennej
  2. wartość domyślna (domyślnie null)
  3. nazwa filtra (domyślnie cmd)

I tu pojawia się moje pytanie dotyczące trzeciego parametru.

Jak mogę stworzyć własny filtr Jinput? Na przykład, jeśli muszę zweryfikować numery telefonów lub adresy IP, to jak mogę zrobić własny filtr do tego?

Joomler
źródło
1
To dla mnie jak dotąd „pytanie roku” ... + 1
Lodder
ja też +1 - już zapytałem o ten konfigurowalny filtr
Tom Kuschel

Odpowiedzi:

2

to jest dość proste

Najpierw utwórz niestandardową klasę Jinput, taką jak class JinputTelephone// co tylko chcesz.

być może zajrzyj do istniejących klas filtrów wejściowych w / libraries / joomla / input

// Zmodyfikuj moduł pobierający i filterMethod, jak chcesz

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

// stosowanie

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

// za pomocą tej metody można również użyć zwykłej obsługi danych wejściowych // Ale nie można jej używać z danymi wejściowymi JApplication

Istnieje wiele innych sposobów, aby to zrobić. Inne rozwiązanie $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

czy to ci pomaga?

JProof
źródło
1

Moja próba

Widzę, że masz trochę doświadczenia z Joomla, więc po prostu włożę w to kilka centów.

  1. musisz utworzyć wtyczkę systemową
  2. musisz utworzyć metodę po init lub podobnym.
  3. teraz musisz zainicjować, JLoaderjeśli się nie mylę i dodać ścieżkę do bibliotek aka/plugins/system/myplugin/libraries/newfilter.php
  4. włącz wtyczkę i zysk; )

PS. możesz w ten sposób utworzyć przesłonięcie zbyt podstawowych bibliotek i platformy Joomla. Taki problem Curl SSL z certyfikatami; )

pozdrowienia

Lana
źródło