วิธีสร้างตัวกรองสำหรับ Jinput


9

ฉันผ่านJInput Documentationแล้ว

เราสามารถเข้าถึงวัตถุ JInput ดังนี้:

JFactory::getApplication()->input;

ถ้าเราดึงค่ามากขึ้นมันจะมีประโยชน์ในการเก็บวัตถุ JInput ในตัวแปรดังนั้นเราไม่จำเป็นต้องเรียกJFactory::getApplication()ทุกครั้งที่เราทำเช่นนั้น:

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

ในการดึงค่าจาก JInput เราจำเป็นต้องใช้วิธีการรับ:

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

อย่างที่คุณเห็นมันมี 3 พารามิเตอร์:

  1. ชื่อตัวแปร
  2. ค่าเริ่มต้น (ค่าเริ่มต้นเป็นโมฆะ)
  3. ชื่อตัวกรอง (ค่าเริ่มต้นถึง cmd)

และนี่คือคำถามของฉันเกี่ยวกับพารามิเตอร์ที่ 3

ฉันจะสร้างตัวกรองของฉันเองได้Jinputอย่างไร ตัวอย่างเช่นหากฉันต้องตรวจสอบหมายเลขโทรศัพท์หรือที่อยู่ IP ฉันจะสร้างตัวกรองของฉันเองได้อย่างไร


1
นี่สำหรับฉันคือ 'คำถามของปี' จนถึงตอนนี้ ... + 1
Lodder

ฉันด้วย +1 - ถามแล้วเกี่ยวกับตัวกรองที่ปรับแต่งได้แล้ว
Tom Kuschel

คำตอบ:


2

มันค่อนข้างง่าย

ก่อนอื่นให้สร้างคลาส Jinput แบบกำหนดเองเช่นclass JinputTelephone// สิ่งที่คุณต้องการ

อาจจะดูในคลาส inputfilter ที่มีอยู่ภายใต้ / libraries / joomla / input

// ปรับเปลี่ยน getter และ filterMethod ตามที่คุณต้องการ

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

// การใช้งาน

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

// ด้วยวิธีนี้คุณสามารถใช้การจัดการอินพุตปกติ // แต่คุณไม่สามารถใช้กับอินพุต JApplication

มีวิธีอื่น ๆ อีกมากมายที่จะทำเช่นนั้นโซลูชันอื่น $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

มันช่วยคุณได้อย่างไร


1

ความพยายามของฉัน

ฉันเห็นว่าคุณมีประสบการณ์กับ joomla ดังนั้นฉันจะใส่เซ็นต์ของฉันลงไป

  1. คุณต้องสร้างปลั๊กอินระบบ
  2. คุณต้องสร้างวิธีการหลังจาก init หรือคล้ายกัน
  3. ตอนนี้คุณต้องเริ่มต้นJLoaderถ้าฉันไม่ผิดและเพิ่มเส้นทางไปยังห้องสมุด aka/plugins/system/myplugin/libraries/newfilter.php
  4. เปิดใช้งานปลั๊กอินและกำไร )

PS คุณสามารถสร้างได้ด้วยวิธีนี้การแทนที่ไลบรารีหลักและแพลตฟอร์ม joomla ด้วย เช่นปัญหา Curl SSL กับ certs; )

ความนับถือ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.