Form Validationを設定して、View側ではset_value(‘name’, ‘default_value’);でいいのかと思っていたらそうではありませんでした。なんなんだー!CodeIgniter!とても面倒だぞ!!
set_value(‘name’, ‘default_value’)メソッドは、Form Validationで検証された要素のみ、反映されます。例えば、5つの要素があったとして、
- $this->form_validation->set_rules(‘firstname’, ‘FirstName’, ‘required’)
- firstname
- lastname
- address
- tel
- fax
の5つがあるとして、firstname, lastnameが必須で、後は別にいいやーと思って、以下のようにしたとします。
function create() { if ($this->input->post()) { $this->load->library('form_validation'); $this->form_validation('firstname', 'FirstName', 'required'); $this->form_validation('lastname', 'LastName', 'required'); if ($this->form_validation->run() == false) { // エラー } else { // 正常 } } }
この場合、エラーになって再度フォームを表示しても、set_valueメソッドが有効なのはfirstnameとlastnameだけで、他のフィールドは空欄になってしまいます!
じゃあどう回避するのか?こうでしょ!
function create() { if ($this->input->post()) { $this->load->library('form_validation'); $this->form_validation('firstname', 'FirstName', 'required'); $this->form_validation('lastname', 'LastName', 'required'); $this->form_validation('address', '', ''); $this->form_validation('tel', '', ''); $this->form_validation('fax', '', ''); if ($this->form_validation->run() == false) { // エラー } else { // 正常 } } }
だ、ださい…。他にいい方法があるのだろうか?