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

Back to archive index

Kenji Suzuki kenji****@gmail*****
2009年 11月 18日 (水) 17:12:07 JST


Kenji です。


On Wed, 18 Nov 2009 15:53:05 +0900
kunitsuji <tsuji****@m-s*****> wrote:

>  kunitsujiです。
> 
> Kenjiさん
> お恥ずかしい限りです。orz
> 
> CI_Form_validation($rules = array())
> コンストラクタ、こうなんですね。。。
> 
> 実はラッパーのクラスを作ってまして、そちらで
> parent::__construct();
> としてしまっておりました。
> parent::__construct($rules);
> ですね。。

なるほど!

これは、ちょっとハマりそうな点ですね。


// Kenji


> マッチボックス、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 mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users




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