フェイバリット回転寿司はサーモンとプリン、きりょうです。
■viewとcontrollerでうまくバリデーションまでたどり着かなかった話。
お名前フォームを下記のように書いてました。
echo form_label("Name: ", "fullName"); //名前のラベルを作成
$data=array(
"name" => "name",
"id" => "name",
"value" => "Name",
);
echo form_input($data); //名前データのinput
そしてsubmitで送る。
echo form_textarea($data);
$data=array(
"name" => "contactSubmit",
"value" => "SEND MESSAGE",
"class" => "contact_btn center-block"
);
echo form_submit($data);
コントローラーでバリデーション。1なら失敗2なら成功。
public function send_email(){
$this->load->library("form_validation"); //ロード
$this->form_validation->set_rules("name","name","required|min_length[1]"); //第一引数はformのタグ名、第二引数はエラーの時に出す項目名、第三引数がバリデーションルール(ミニマム1文字でおなしゃす指定をしている)
if($this->form_validation->run()==FALSE){
echo 1;exit;//バリデーションFALSEなら1
}else{
echo 2;exit;//それ以外(成功したら)2
}
}
2って出る。
_人人人人人人人_
> クソ検閲 <
 ̄Y^Y^Y^Y^Y^Y ̄
なぜかフォームに何も入れてないのにバリデーション通っちゃいます。
結果から言うと、フォームに入れてたvalueでした。
そりゃあ最初っから値入ってたらいけるよね〜
ということで下記に変更。
echo form_label("Name: ", "fullName"); //名前のラベルを作成
$data=array(
"name" => "name",
"id" => "name",
"value" => "",
);
echo form_input($data); //名前データのinput
Nameが半透明になってる。これじゃん。
ということで無事にFALSEの1が出力されました。
最初コントローラーで、
public function send_email($data)
とかやったり
public function send_email(){
$this->input->post('name')
とかでポスト受けとらなきゃいけないのかな〜とか
考えてたのですが、
validationクラスは勝手にポストの値をセットしてくれるようです。
関係ないけどlibraryとhelperって書いてあるのに日本語訳がバリデーションクラスって書いてあるの戸惑いますね。。
表記はバリデーションライブラリとかにしておいて、最初に
「ライブラリとはphpのクラスです」
って書いてくれれば親切ですね。
とりま現場からは以上です。