PHPであるオブジェクトの状態をセットする際、$model->status = "public"
のように文字列で登録しています。
取りうる状態には public, pending, private のいずれかしか入らないとして、登録時にフォームのセレクトボックスでその3つを選択させます。下の見本は実物ではなくイメージですが、コントローラーで新規作成時と編集時に状態の選択肢をビューに渡しています。
php
1// コントローラー部分 2function create(){ 3 return view('create.template', [ 4 'statusList' => ['public', 'pending', 'private'] 5 ]); 6} 7 8function edit($id){ 9 return view('edit.template', [ 10 'statusList' => ['public', 'pending', 'private'] 11 ]); 12} 13 14// テンプレートファイル 15<form> 16 <!-- 配列をもとにoptionタグが生成されます --> 17 <?php selectBox('status', $statusList); ?> 18</form>
このままでは crate() と edit() で同じ statusList を書く必要があり、この先状態の種類が追加された時にすべての同様の箇所を探して修正することになります。
この public や private などの値をモデルに持たせるならプロパティかスタティックメソッドで Model::getStatusList()
のようにするかと思います。専用のクラスを使ってModelState::PUBLIC
のような定数を使うこともあるかもしれません。
ビューに持たせるなら直接htmlとして<option>
を手書きするくらいしか無いように思えます。
コントローラーであれば$this->getStatusList()
あたりでしょうか。
もっと他の手段や、わざわざそんなことしないなどの意見も含めて一般的にはどのようにもたせるべきでしょうか?
ハック的なやり方よりもなるべく誰もが使っている普遍的な手法を探しています。よろしくお願いします。