この例は、ci フォーム ヘルパーを使用した選択ドロップダウン リスト用です (別のフォームからこれを変更しているので、すべて正しいことを願っています)。
the Array of select values is: $categoryarray
the drop down field name is 'category'
the default value is $defaultcategory
a css class to style (bootstrap etc): $dropclass = 'class="input-medium"';
コード行は次のとおりです。
form_dropdown('category',$categoryarray,set_value('category',$defaultcategory),$dropclass).form_error('category');
form_error('category'); 最後に、検証エラー メッセージを表示するためのものです。デフォルト値がありますが (フォームがフォーム内の別のフィールドからの検証に失敗した場合)、これはユーザーが選択したものを「記憶」します。
編集 !
良いニュースと悪いニュースがあります。悪いニュース - カテゴリがデータベースから取得されている場合は、それらを再度取得する必要があります。良いニュース - CI は、ユーザーがドロップダウン リストから選択したカテゴリを記憶しています。
モデルにカテゴリ配列を作成する場合、悪いニュースは実際にはそれほど大きな問題ではありません。次に、検証に追加するコードを 1 行だけ追加します。
// In the Model
function makedropdown() {
// get your category list
$cats = $this->getAllCategories() ;
$categoryarray = array();
// make the array
foreach ( $cats->result() as $row ) {
$categoryarray[$row->category] = $row->category ; }
return $categoryarray ;
}
誰かがフォームに記入し、検証を実行すると、検証が失敗します。コントローラーで:
if ( $this->form_validation->run($formrules) == FALSE ) {
// get the categoryarray
$data['categoryarray'] = $this->categorymodel->makedropdown() ;
// load form again
$this->load->view( 'myform', $data ); }
したがって、選択リストに動的に入力するためにデータベースからカテゴリを再度取得している場合でも、CI はユーザーが最初にフォームを実行したときの選択を記憶しています。
ドロップダウンのデフォルト カテゴリはどうでしょうか。変更しない場合は、構成として設定できます。カテゴリ値がデータベースから取得され、変更される可能性がある場合、モデルにデフォルトのカテゴリを作成できます。
編集2
とにかく私はいつもこれをやっているのに、なぜ私はこれのためにそれを考えなかったのですか. ええ、これは、ビューを表示するための特定の方法を作成するもう1つの理由です
function _showCategoryForm(){
// get the categoryarray
$data['categoryarray'] = $this->categorymodel->makedropdown() ;
// anything else thats needed for the view
// load form view
$this->load->view( 'myform', $data ); }
今はコードを繰り返す必要はなく、必要に応じてエラー メッセージを表示して検証の失敗を簡単にカスタマイズできます。
// since i'm grinding on this - the validation should happen in a model
// and that method returns true or false
if ( $this->somemodel->validateCategoryForm() == FALSE ) {
// custom obnoxious error message
$this->formerrormessage = "What part of required is eluding you?" ;
$this->_showCategoryForm() ; }
フォームのニーズが変わった場合、変更は 1 か所だけで済むため、これははるかに優れています。また、プライベート メソッドが優れたプラクティスであることを思い出させるために、アンダースコアを追加しました。また、フォームの検証は、コントローラーによって呼び出されるモデルで個別に行う必要があります。