Làm cách nào để tạo bộ lọc cho Jinput?


9

Tôi đã trải qua với Tài liệu JInput .

Chúng ta có thể truy cập đối tượng JInput như thế này:

JFactory::getApplication()->input;

Nếu chúng tôi đang truy xuất nhiều giá trị hơn, sẽ rất hữu ích khi lưu trữ đối tượng JInput trong một biến để chúng tôi không cần gọi JFactory::getApplication()mỗi khi chúng tôi thực hiện điều đó:

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

Để lấy giá trị từ JInput, chúng ta cần sử dụng phương thức get của nó:

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

Như bạn có thể thấy, nó có 3 tham số:

  1. tên biến
  2. giá trị mặc định (mặc định là null)
  3. tên bộ lọc (mặc định là cmd)

Và đây là câu hỏi của tôi về thông số thứ 3.

Làm cách nào tôi có thể tạo bộ lọc của riêng mình Jinput? Ví dụ: nếu tôi phải xác thực số điện thoại hoặc địa chỉ IP thì làm cách nào tôi có thể tạo bộ lọc của riêng mình cho điều đó?


1
Điều này đối với tôi là "câu hỏi của năm" cho đến nay ... + 1
Tạm biệt

tôi cũng vậy, +1 - đã được hỏi về bộ lọc có thể tùy chỉnh đó
Tom Kuschel

Câu trả lời:


2

cái này khá đơn giản

Đầu tiên, tạo một lớp Jinput tùy chỉnh, chẳng hạn như class JinputTelephone// những gì bạn muốn.

có lẽ, hãy xem các lớp bộ lọc đầu vào hiện có trong / library / j Joomla / input

// Sửa đổi getter và filterMethod theo ý muốn

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

// sử dụng

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

// với phương thức này, bạn cũng có thể sử dụng xử lý đầu vào thông thường // Nhưng bạn không thể sử dụng nó với JApplication một đầu vào

Có nhiều cách khác để làm điều đó Một giải pháp khác $ data = MyFilter :: SanitizeNumber ($ jinput-> get ('varname', 'default_value', 'raw'));

nó có giúp gì cho bạn không


1

Tôi cố gắng

Tôi thấy rằng bạn có một số kinh nghiệm với j Joomla vì vậy tôi sẽ chỉ đưa vài xu của tôi vào đó.

  1. bạn cần tạo plugin hệ thống
  2. bạn cần tạo một phương thức sau init hoặc tương tự.
  3. bây giờ bạn cần bắt đầu JLoadernếu tôi không sai và thêm đường dẫn đến thư viện aka/plugins/system/myplugin/libraries/newfilter.php
  4. kích hoạt plugin và lợi nhuận; )

Tái bút bạn có thể tạo bằng cách này ghi đè lên các thư viện và nền tảng cốt lõi của Joomla. Như một vấn đề Curl SSL với certs; )

Trân trọng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.