目的
FuelPHPでファイルをアップロードするためのフォームを作成しています。
ファイルを選択せずにsubmitするのを防ぐために、type="file"のフィールドにValidationクラスの必須チェックadd_rule('required')
を付与しています。
質問
ファイルを選択せずにsubmitしようとすると必須チェックが上手く機能するのは確認できましたが、ファイルを選択してもバリデーションチェックNGの処理(下記コードの(★★★)部分)に入ってしまいます。
原因がわかる方がいましたら、ご指摘いただけると助かります。
ブラウザで見たフォームのイメージ
下記のようにファイルを選択してsubmit(アップロード)した場合も、バリデーションチェックNGの処理(下記コードの(★★★)部分)に入ってしまいます。
コントローラの内容
PHP
1class Controller_Csv extends Controller_Template 2{ 3 public function action_index() 4 { 5 $form_data = ''; 6 7 //フォームを作成(type="file"のフィールドを含む) 8 $form = Fieldset::forge('csvform', array( 9 'form_attributes' => array( 10 'enctype'=>'multipart/form-data', 11 'class'=>'p-form' 12 ) 13 ) 14 ); 15 16 //フォームに項目を追加(type="file"と"submit"のみ) 17 $form->add('csvfile', '', array('type'=>'file', 'placeholder'=>'CSVファイル')) 18 ->add_rule('required'); //ファイル必須チェックを付与 19 $form->add('submit', '', array('type'=>'submit', 'value'=>'アップロード')); 20 21 //POST送信された場合 22 if(Input::method() === 'POST') 23 { 24 $val = $form->validation(); 25 26 //バリデーションチェックOKの場合 27 if($val->run()) 28 { 29 var_dump('OK'); 30 31 //バリデーションチェックNGの場合(★★★) 32 } 33 else 34 { 35 var_dump('NG'); 36 } 37 } 38 39 //ビューを作成 40 $this->template->head = View::forge('layout/head'); 41 $this->template->header = View::forge('layout/header'); 42 $this->template->footer = View::forge('layout/footer'); 43 $this->template->content = View::forge('contents/csv'); 44 $this->template->set_global('csvform', $form->build(''), false); 45 $this->template->set_global('form_data', $form_data); 46 } 47}
試したこと
type="file"
の代わりにtype="text"
の項目にした場合は、テキストボックスに入力してsubmitするとバリデーションOKの処理に入れました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。