Kenji Suzuki
kenji****@gmail*****
2009年 11月 18日 (水) 10:53:01 JST
Kenji です。 On Tue, 17 Nov 2009 15:59:41 +0900 kunitsuji <tsuji****@m-s*****> wrote: > kunitsujiです。 > > ちょっとわかるかたいますでしょうか? > > ルールグループがコントローラー/メソッドの名前に一致する名前のとき、run()メソッドが呼び出された時に自動的に使用されます。 > > ということですが、 > runメソッドでは次のようなコードです。 > > > /** > * Run the Validator > * > * This function does all the work. > * > * @access public > * @return bool > */ > function run($group = '') > { > // Do we even have any data to process? Mm? > if (count($_POST) == 0) > { > return FALSE; > } > > // Does the _field_data array containing the validation rules exist? > // If not, we look to see if they were assigned via a config file > if (count($this->_field_data) == 0) > { > // No validation rules? We're done... > if (count($this->_config_rules) == 0) > { > return FALSE; > } > > // Is there a validation rule for the particular URI being accessed? > $uri = ($group == '') ? trim($this->CI->uri->ruri_string(), '/') : $group; > > if ($uri != '' AND isset($this->_config_rules[$uri])) > { > $this->set_rules($this->_config_rules[$uri]); > } > else > { > $this->set_rules($this->_config_rules); > } > > 仕様では、runメソッドを呼び出したときに、メソッド名とForm_Validationの設定ファイル、コンフィグのGROUPが同じであれば、 > 自動的に呼び出されます、ということですが、、、 > > どう考えても正常に動きません。 > 上のソースをみてもらえればわかりますが、 > そもそも最初に > $this->_config_rulesが設定されていなければRETURNされます。 > > で、その下でGROUPがない場合、URIからGROUPを割り出して、設定しているように見えます。 > つまり、そもそも$this->_config_rulesがない時点で動きません。 > また、コンストラクタの中では、 > $this->_config_rules = $rules; > とだけしています。 config/form_validation.php があれば、ライブラリの初期化時に読み込まれ 設定されます。 config/form_validation.php を用意してルールグループ名をmember/signup とし、memberコントローラを作成し、 public function signup() { $this->form_validation->run(); } とだけしてみました。 Form_validationクラスの runメソッドが実行されるとき、$this->_config_rules には、設定ファイルで定義した配列が、ちゃんとセットされていました。 > ドキュメントにある、form_validation.phpというファイルをconfig/に保存しておけば自動で読み込まれるというのは、バグでしょうか? 動くと思います。 > それとも自分の使い方がおかしいということですかね?? > set_rule()を行わないといけないということでしょうか。。 set_rules() は不要です。run()メソッド内で自動で行われますから。 どこで動かなくなってますか? 設定ファイルが読み込まれてなく、$this->_config_rules がセット されていないなら、matchbox の影響でしょうかね? 設定ファイルの読み込みは、Loaderクラスの _ci_init_class()メソッドで 行われます。 // Kenji > ファイルに分けてと思ってところ、設定ファイルを外部に保存できる、というドキュメントを見てこれであればコントローラの中の記述が > 楽になるなぁト思ってたのですが。。 > > 分かる方教えてください。m(_ _)m > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users