Como criar filtros para Jinput?


9

Passei pela documentação do JInput .

Podemos acessar o objeto JInput assim:

JFactory::getApplication()->input;

Se estamos recuperando mais valores, seria útil armazenar o objeto JInput em uma variável, para que não precisemos chamar JFactory::getApplication()toda vez que fizermos isso:

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

Para recuperar um valor do JInput, precisamos usar o método get:

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

Como você pode ver, ele possui 3 parâmetros:

  1. o nome da variável
  2. o valor padrão (o padrão é nulo)
  3. o nome do filtro (o padrão é cmd)

E aqui vem a minha pergunta sobre o terceiro parâmetro.

Como posso criar meu próprio filtro Jinput? Por exemplo, se eu tiver que validar números de telefone ou endereço IP, como posso fazer meu próprio filtro para isso?


11
Isso para mim é a 'questão do ano' até agora ... + 1
Lodder

eu também, um - já perguntou sobre esse filtro personalizável
Tom Kuschel

Respostas:


2

isso é bem simples

Primeiro, crie uma classe Jinput personalizada, como class JinputTelephone// o que você quiser.

talvez, dê uma olhada nas classes de filtro de entrada existentes em / libraries / joomla / input

// Modifique o getter e filterMethod como desejar

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

// uso

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

// com esse método, você também pode usar a manipulação regular de entrada // Mas você não pode usá-lo com JApplication uma entrada

Existem muitas outras maneiras de fazer isso. Outra solução $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

isso ajuda você?


1

Minha tentativa

Eu vejo que você tem alguma experiência com o Joomla, então apenas colocarei meus poucos centavos nele.

  1. você precisa criar um plugin do sistema
  2. você precisa criar um método após o init ou similar.
  3. agora você precisa iniciar JLoaderse não estiver errado e adicionar caminho às bibliotecas, aka/plugins/system/myplugin/libraries/newfilter.php
  4. ativar plug-in e lucro; )

PS. você pode criar dessa maneira um override também as bibliotecas e plataformas principais do joomla. Um problema SSL tão curl com certs; )

Saudações

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.