如何为Jinput创建过滤器?


9

我已经阅读了JInput文档

我们可以像这样访问JInput对象:

JFactory::getApplication()->input;

如果要检索更多的值,将JInput对象存储在变量中将很有用,因此不需要JFactory::getApplication()每次执行此操作时都调用:

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

要从JInput检索值,我们需要使用其get方法:

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

如您所见,它具有3个参数:

  1. 变量名
  2. 默认值(默认为null)
  3. 筛选器名称(默认为cmd)

这是我关于第三个参数的问题。

如何制作自己的过滤器Jinput?例如,如果我必须验证电话号码或IP地址,那么我该如何为此做自己的过滤器?


1
对我来说,这是到目前为止的“年度问题” ... + 1
Lodder

我也一样,+1 -已经询问了定制过滤器
汤姆·库舍尔

Answers:


2

这很简单

首先,创建一个自定义Jinput类,例如class JinputTelephone//您想要的东西。

也许看看/ libraries / joomla / input下的现有inputfilter类

//根据需要修改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如果我没记错,您需要启动并添加到库的路径/plugins/system/myplugin/libraries/newfilter.php
  4. 启用插件和利润; )

PS。您可以通过这种方式创建一个覆盖joomla核心库和平台的覆盖。这样的带有证书的Curl SSL问题; )

问候

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.