CodeIgniterでFormを作ってます。
バリデーションについて教えてください。
質問
フォームに入力した値を送信後にバリデーションチェックし、不正があれば同じviewを表示して、その際に入力した文字列をフォーム要素に表示したいです。この入力した文字列のフォームへの表示方法がわかりません。
ソース
- Form要素にinput要素に値を入れて、Submitするviewを作ります。
views/form.php
php
1<?= form_open( 'confirm' ); ?> 2<h3>テスト</h3> 3<?= form_input( array( 'name' => 'test' ) ); ?> 4<?= form_submit( 'submit_button', '送信' ); ?> 5<?= form_close(); ?>
- Controller側でバリデーションを実行し、バリデーションで不正となったら再度views/form.phpを表示し、正常であればviws/confirm.phpを表示するようにします。
controllers/form.php
php
1<?php 2defined('BASEPATH') OR exit('No direct script access allowed'); 3class Form extends CI_Controller { 4 // 最初にviews/form.phpを表示するメソッド 5 public function form() { 6 $this->load->helper( 'form' ); 7 $this->load->view( 'form' ); 8 } 9 10 // Submitされた場合に実行されるメソッド 11 public function confirm() { 12 $this->load->helper( 'form' ); 13 $this->load->library( 'form_validation' ); 14 $this->form_validation->set_rules( 'field' => 'test', 'label' => 'テスト', 'rules' => 'alpha' ); 15 16 if ( ! $this->form_validation->run() ) { 17 $this->load->view( 'form' ); // ←inputに入力された文字列がアルファベット以外の場合はvies/form.phpを再度表示する 18 } else { 19 $this->load->view( 'confirm' ); 20 } 21 } 22}
何をしたいか?
inputはアルファベットしか許容しないとします。
例えば日本語「ほげほげ」と入力したらControllerでバリデーションを実行し、不正になるので再度viws/form.phpが表示されます。
このとき、inputのvalueに「ほげほげ」を表示したいのです。
やってみたこと
views/form.phpにinputのvalueを設定してみました。
- controllers/form.phpにpostで受けた値を$dataに格納しviewに渡す
php
1<?php 2defined('BASEPATH') OR exit('No direct script access allowed'); 3class Form extends CI_Controller { 4 // 最初にviews/form.phpを表示するメソッド 5 public function form() { 6 $this->load->helper( 'form' ); 7 $data['posts'] = $this->input->post(); // これを追加 8 $this->load->view( 'form', $data ); // viewに$dataを渡す 9 }
- views/form.phpのinput要素にvalueを追加
php
1<?= form_open( 'confirm' ); ?> 2<h3>テスト</h3> 3<?= form_input( array( 'name' => 'test', value => $posts['test'] ) ); ?> <!-- valueを追加 --> 4<?= form_submit( 'submit_button', '送信' ); ?> 5<?= form_close(); ?>
しかし初回views/form.phpを実行すると、「Message: Undefined variable: posts」というエラーが出ます。
初回はpostされる値がないのでposts
が定義されていないため当たり前のエラーです。
CodeIgniterではこのようにバリデーションしてフォームを再表示した場合にフォーム要素に送信時に入力した値を表示するにはどのようにするのでしょうか?
どうぞよろしくお願い致します。
環境
php 7.2, CodeIgniter 3.1.9
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。