Bagaimana cara membuat filter untuk Jinput?

9

Saya telah melalui Dokumentasi JInput .

Kita dapat mengakses objek JInput seperti ini:

JFactory::getApplication()->input;

Jika kita mengambil lebih banyak nilai, akan berguna untuk menyimpan objek JInput dalam variabel sehingga kita tidak perlu memanggil JFactory::getApplication()setiap kali kita melakukan itu:

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

Untuk mengambil nilai dari JInput kita perlu menggunakan metode get nya:

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

Seperti yang Anda lihat, ini memiliki 3 parameter:

  1. nama variabel
  2. nilai default (standar ke nol)
  3. nama filter (default ke cmd)

Dan inilah pertanyaan saya mengenai parameter ke-3.

Bagaimana cara saya membuat filter sendiri Jinput? Misalnya jika saya harus memvalidasi nomor telepon atau alamat IP, lalu bagaimana saya bisa membuat filter sendiri untuk itu?

Joomler
sumber
1
Bagi saya ini adalah 'pertanyaan tahun ini' ... + 1
Lodder
saya juga, +1 - sudah bertanya tentang filter yang dapat disesuaikan itu
Tom Kuschel

Jawaban:

2

ini cukup sederhana

Pertama-tama buatlah kelas Jinput khusus seperti class JinputTelephone// apa pun yang Anda inginkan.

mungkin, lihat di kelas inputfilter yang ada di bawah / libraries / joomla / input

// Ubah pengambil dan filterMetode seperti yang Anda inginkan

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

// penggunaan

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

// dengan metode ini Anda juga dapat menggunakan penanganan input reguler // Tapi Anda tidak dapat menggunakannya dengan JApplication input

Ada banyak cara lain untuk melakukan itu Solusi lain $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

apakah ini membantu anda?

JProof
sumber
1

Usaha saya,

saya melihat bahwa Anda memiliki pengalaman dengan joomla jadi saya hanya akan memasukkan beberapa sen ke dalamnya.

  1. Anda perlu membuat plugin sistem
  2. Anda perlu membuat metode setelah init atau serupa.
  3. sekarang Anda perlu memulai JLoaderjika saya tidak salah dan menambahkan path ke perpustakaan alias/plugins/system/myplugin/libraries/newfilter.php
  4. aktifkan plugin dan keuntungan; )

PS. Anda dapat membuat dengan cara ini menimpa pustaka dan platform inti joomla juga. Seperti masalah Curl SSL dengan sertifikat; )

salam

Lanah
sumber