[Codeigniter-users] これは正常に動くのでしょうか?Form_validation

Back to archive index

kunitsuji tsuji****@m-s*****
2009年 11月 18日 (水) 15:53:05 JST


 kunitsujiです。

Kenjiさん
お恥ずかしい限りです。orz

CI_Form_validation($rules = array())
コンストラクタ、こうなんですね。。。

実はラッパーのクラスを作ってまして、そちらで
parent::__construct();
としてしまっておりました。
parent::__construct($rules);
ですね。。

マッチボックス、HMVCに関しては階層がかわるので、そのあたり調整したらいけ
そうです。

ありがとうございます。


>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
>
>_______________________________________________
>Codeigniter-users mailing list
>Codei****@lists*****
>http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users




Codeigniter-users メーリングリストの案内
Back to archive index