私はcodeigniterについて嫌いなことの1つは、コントローラ内にある検証ロジックであり、簡単にコードを増やしてしまいます。除き、codeigniter 3のカスタム検証
class User_Create extends BS_Validator
{
protected $fields = array(
'name' => 'Nome',
'email' => 'Email',
'password' => 'Senha',
'password_repeat' => 'Repetir senha'
);
protected $rules = array(
'name' => 'required|min_length[3]|max_length[50]',
'email' => 'required|min_length[8]|max_length[100]|valid_email|is_unique[users.email]',
'password' => 'required',
'password_repeat' => 'required|callback_password_repeat_check'
);
public function password_repeat_check ($password_repeat)
{
return true;
}
}
すべてが魔法のように動作します:私は、このクラスを拡張し、各検証について
Class BS_Validator extends CI_Model
{
protected $rules = array();
protected $fields = array();
# Get keys of fields.
public function getStructure()
{
return array_keys($this->fields);
}
# Validate $_POST against the rules and fields.
public function validate()
{
$this->load->library('form_validation');
foreach($this->rules as $key => $rule)
{
$this->form_validation->set_rules($key, $this->fields[$key], $rule);
}
return $this->form_validation->run($this);
}
}
:このロジックコントローラーを分離するために、私はform_validation library
をインポートしたモデルを作成しましたカスタム検証メソッド。これは決して呼び出されません。この特定のケースでは、常に(pasword_repeat_check)
エラーを返します。
この方法で何をすべきですか?
あなたが作成していないのはなぜ'form_validation.php'は設定ライブラリの中にありますか?したがって、すべての検証ルールは単一の場所に保存され、codeigniterによって組み込み関数になります – Arun
Codeigniter 3を使用しているので、Callableを見ましたか? http://www.codeigniter.com/user_guide/libraries/form_validation.html#callable-use-anything-as-a-rule – cartalot
はい、また動作しませんでした。おそらく、私が作成したラッパー 'BS_Validator'の問題です。 –