EDIT2:スクロールダウンして最新の情報を入手してください!カスタムコールバック検証ルール(CodeIgniter 3 HMVC)が見つかりません
CodeIgniter 3では、最近私のコントローラのすべてでコールバックルールをapplication/libraries/MY_Form_validation.php
に移動し、コードの繰り返しなどを防ぎ、クリーンアップしました。
今はもう機能していないようです。
MY_Form_validation.phpは次のように起動します:
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation
{
public $CI;
function run($module = '', $group = '')
{
log_message('debug',"Now running the MY_Form_validation");
(is_object($module)) AND $this->CI = &$module;
return parent::run($group);
}
はその後、コールバック関数の全リストは以下の、すべてのpublic function callback_name(){}
と定義します。
また、提供されたユーザーログイン情報が正しいかどうか(したがってユーザーがログインできるかどうかなど)を確認する(同じクラスにありますが)フォーム検証でルールが見つからない場合もあります。
エラーログは次のようになります。
INFO - 2016-06-23 13:33:18 --> Form Validation Class Initialized
DEBUG - 2016-06-23 13:33:18 --> Now running the MY_Form_validation
INFO - 2016-06-23 13:33:18 --> Language file loaded: language/english/form_validation_lang.php
DEBUG - 2016-06-23 13:33:18 --> Unable to find callback validation rule: check_database
最初のDEBUGメッセージが(その上書きrun()
方法が使用されているように、したがって、デバッグログ)MY_Form_validation
がロードされていることを示しているが、それは何とか見つけることができませんコールバック関数は以下で明確に定義されています。
私はまた、次の行で言語ファイルapplication/language/english/form_validation_lang.php
含ま:
$lang['form_validation_check_database'] = 'The password does not match the username. Try again.';
、それは正しくキャッチ(フォームの検証を実行するとき、すなわち、このメッセージが表示されている)、それは何らかの形でコールバック関数自体を見つけることができません。
編集:私はメソッドが正しく継承されていなかったかどうかチェック:
public function __construct($rules = array())
{
$this->CI =& get_instance();
var_dump(get_class_methods($this));
var_dump()
は出力にする方法、独自のカスタムコールバックや内蔵のものの両方の正しい、完全な配列を行います。
EDIT2: 私はsystem/libraries/Form_validation.php
を読んで、デバッグメッセージが発生する場所を調べ、このコードサンプル(ライン734から749)で見ることができる。
// Call the function that corresponds to the rule
if ($callback OR $callable !== FALSE)
{
if ($callback)
{
if (! method_exists($this->CI, $rule))
{
log_message('debug', 'Unable to find callback validation rule: '.$rule);
$result = FALSE;
}
else
{
// Run the function and grab the result
$result = $this->CI->$rule($postdata, $param);
}
}
コールバックだけを探しているかのように思えメインのCIオブジェクトには存在しますが、フォーム検証ライブラリ自体には含まれません。ライブラリーのコールバックを選択するハッキーな例外を追加することもできますが、これが最善のことだとは思っていません。私は単純なものを見落としていると思います...
追加情報が必要な場合はお知らせください。