私のフォーム入力には特定のルールが必要なので、ライブラリを次のように拡張しました。
<?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 では、この異常は発生しません。
私は困惑しています、どんな助けでも大歓迎です。