0

私のフォーム入力には特定のルールが必要なので、ライブラリを次のように拡張しました。

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class MY_Form_validation extends CI_Form_validation
{
    function __construct($config = array())
    {
        parent::__construct($config);
    }
    //.............
}

それは私にとってはうまくいきましたが、今では、たとえば次のような検証機能があることに気付きました:

public function is_sentence($str)
    {
        if (!preg_match("/^[a-zA-Z0-9-?._ -]+$/", $str))// Alpha, Int, Basic Punctuation, Hyphens, Underscores, Spaces
        {
            $this -> set_message('is_sentence', 'The %s field can only contain letters, digits, spaces, dashes and periods.');
            return FALSE;
        }
    }

確かにreturn TRUE(文の文字のみが含まれていることを意味します)、検証は CodeIgniter から run() を渡しますが、他のフォームは失敗します。これが問題の始まりです。form_helper の set_value() 関数が機能せず、is_sentence ルールを使用して入力フィールドを空のままにします。

このライブラリを拡張するのはこれが初めてで、この問題を解決できません。

要約すると、次のようになります。

カスタム検証関数を使用している場合、カスタム検証を除く他のすべてのフォーム入力の検証が失敗した場合、カスタム検証の set_value() はエコーしなくなります。

is_sentence の検証で意図的にエラーを発生させた場合、 set_value() は期待どおりに機能します!

同様に、デフォルトの検証規則 (「interger」など) を使用する他の form_inputs では、この異常は発生しません。

私は困惑しています、どんな助けでも大歓迎です。

4

1 に答える 1