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

Back to archive index

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




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