Jinput için filtreler nasıl oluşturulur?


9

Beraber üzerinden geçti JInput Belgeler .

JInput nesnesine şu şekilde erişebiliriz:

JFactory::getApplication()->input;

Daha fazla değer alırsak, JInput nesnesini bir değişkende saklamak yararlı olur, bu yüzden bunu JFactory::getApplication()her yaptığımızda çağırmamız gerekmez :

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

JInput'tan bir değer almak için get yöntemini kullanmamız gerekir:

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

Gördüğünüz gibi 3 parametresi var:

  1. değişken adı
  2. varsayılan değer (varsayılan olarak null)
  3. filtre adı (varsayılan olarak cmd'dir)

Ve 3. parametreyle ilgili sorum geliyor.

Kendi filtresini nasıl yapabilirim Jinput? Örneğin, telefon numaralarını veya IP adresini doğrulamam gerekirse, bunun için nasıl kendi filtremi oluşturabilirim?


1
Bu benim için şimdiye kadar 'yılın sorunu' ... + 1
Lodder

ben de, +1 - zaten özelleştirilebilir filtre hakkında sordu
Tom Kuschel

Yanıtlar:


2

bu oldukça basit

İlk önce class JinputTelephone// istediğiniz herhangi bir özel Jinput sınıfı oluşturun .

belki / libraries / joomla / input altındaki mevcut inputfilter sınıflarına bir göz atın

// Alıcıyı ve filterMethod'u istediğiniz gibi değiştirin

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

// kullanım

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

// bu yöntemle normal girdi işlemeyi de kullanabilirsiniz // Ancak JApplication ile girdi kullanamazsınız

Bunu yapmanın başka birçok yolu var Başka bir çözüm $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

size yardımcı oluyor mu?


1

Benim denemem,

joomla ile biraz deneyimim olduğunu görüyorum, bu yüzden içine sadece birkaç sent koyacağım.

  1. sistem eklentisi oluşturmanız gerekiyor
  2. init veya benzeri bir yöntemden sonra bir yöntem oluşturmanız gerekir.
  3. şimdi JLoaderyanlış değilsem başlatmanız ve kütüphanelere aka/plugins/system/myplugin/libraries/newfilter.php
  4. eklenti ve kar sağlama; )

PS. bu şekilde çok joomla çekirdek kütüphanelerini ve platformunu geçersiz kılar. Sertifikalarla böyle bir Curl SSL sorunu; )

Saygılarımızla

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.