bootstrapの基本形
レスポンシブwebデザインのページを作成する際に利用するフレームワークの一つにbootstrapがあります。
bootstrapでは、グリッドという概念があり、横方向に12個のグリッドに分割しています。このグリッドを1~12個まとめて一つの表示フィールドとします。
一般的には次のようになります。
<div class="container-fluid"> <div class="row"> <div class="col-xs-2"><label for="field"></label></div> <div class="col-xs-6"><input type="text" id="field" name="field"></div> <div class="col-xs-4"></div> <div class="col-xs-12"><hr /></div> </div> </div>
Form->control()メソッドで実現する方法
CakePHP3のFormヘルパーのcontrol()
メソッドでは、テンプレートを使ってinputやlabel、divエレメントに展開しています。
ですので必要に応じて、テンプレートを変更します。
viewで変更するには、
<?php $this->Form->templates([ 'label' => '<div class="col-xs-2"><label{{attrs}}>{{text}}</label></div>', 'input' => '<div class="col-xs-6"><input type="{{type}}" name="{{name}}"{{attrs}}/></div>', 'error' => '<div class="col-xs-4 error-message">{{content}}</div>', 'inputContainer' => '<div class="row input {{type}}{{required}}">{{content}}</div><div class="col-xs-12"><hr /></div>', 'inputContainerError' => '<div class="row input {{type}}{{required}} error">{{content}}{{error}}</div><div class="col-xs-12"><hr /></div>', ]);
のようにテンプレートを変更します。
この状態で
$this->Form->control('field');
とした場合に出力されるHTMLは、
<div class="row input text"> <div class="col-xs-2"><label for="field"></label></div> <div class="col-xs-6"><input type="text" id="field" name="field"></div> <div class="col-xs-12"><hr /></div> </div>
のようになります。
また、バリデーションエラーがあると、
<div class="row input text error"> <div class="col-xs-2"><label for="field"></label></div> <div class="col-xs-6"><input type="text" id="field" name="field"></div> <div class="col-xs-4 error-message">エラーメッセージ</div> <div class="col-xs-12"><hr /></div> </div>
のようになります。
ここではinputエレメントのみを変更していますが、必要に応じて、他のエレメントも変更して対応できます。