web-dev-qa-db-ja.com

Jinputのフィルターを作成するには?

JInput Documentation を試してみました。

次のように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)

そしてここで、3番目のパラメーターに関する私の質問が来ます。

Jinputに独自のフィルターを作成するにはどうすればよいですか?たとえば、電話番号またはIPアドレスを検証する必要がある場合、どうすればそのための独自のフィルターを作成できますか?

9
Joomler

これはとても簡単です

最初に、class JinputTelephone //などのカスタムJinputクラスを作成します。

おそらく、/ 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'));

それはあなたを助けますか?

2
JProof

私の試み、

joomlaの経験があるようですので、数セント入れてみます。

  1. システムプラグインを作成する必要があります
  2. initなどの後にメソッドを作成する必要があります。
  3. 今私は間違っていない場合はJLoaderを開始し、ライブラリへのパスを追加する必要がありますa.k.a. /plugins/system/myplugin/libraries/newfilter.php
  4. プラグインと利益を有効にします。 )

PS。このようにして、joomlaコアライブラリとプラットフォームをオーバーライドして作成できます。証明書に関するこのようなCurl SSLの問題。 )

よろしく

1
Lanah