ตามปกติ form ของ yii ที่ใช้ GII generate ออกมาจะเป็นรูปแบบ label บรรทัดหนึ่ง input อีกบรรทัดหนึ่ง อ่านง่าย สวยงามพอสมควร แต่อาจจะไม่ถูกใจบรรดาหัวหน้าอนุรักษ์นิยมทั้งหลาย
yii มีอีกทางเลือกให้ใช้ทำฟอร์ม คือ มี Horizontal form ให้เลือกใช้ yii bootstrap activeform (Horizontal form) อีกตัว
วิธีการคือ
- เปิดไฟล์ _form.php ใน view เป้าหมาย
- เปลี่ยน use yii\widgets\ActiveForm; เป็น use yii\bootstrap\ActiveForm; ถ้าไม่เปลี่ยนจะเจอ error Setting unknown property: yii\widgets\ActiveForm::layout
- เปลี่ยน
$form = ActiveForm::begin();
เป็น
$form = ActiveForm::begin([ 'fieldConfig' => [ 'horizontalCssClasses' => [ 'label' => 'col-sm-2', 'offset' => 'col-sm-offset-2', 'wrapper' => 'col-sm-10' ] ], 'layout' => 'horizontal' ]);
- layout คือ จะวางฟอร์มเป็นแบบไหน มีให้เลือก คือ default, horizontal และ inline
- label คือ ค่า grid ของ label
- wrapper คือ ความกว้างของช่อง input
- offset คือ การเว้นระยะของพวก checkbox ตั้งไว้เท่ากับ label จะได้ตรงกันพอดี
สำเร็จแล้ว ฟอร์มจะเปลี่ยนเป็นรูปแบบเหมือนกับ Bootstrap Horizontal form โดย
เสร็จแล้ว หรือจะใช้การจัด code แบบของผมก็ได้ครับ ไม่อยากสลับ php เข้าออก ไปๆ มาๆ
<?php use yii\helpers\Html; use yii\bootstrap\ActiveForm; ?> <div class="user-form"> <?php $form = ActiveForm::begin([ 'fieldConfig' => [ 'horizontalCssClasses' => [ 'label' => 'col-sm-2', 'offset' => 'col-sm-offset-2', 'wrapper' => 'col-sm-10' ] ], 'layout' => 'horizontal' ]); echo $form->field($model, 'username')->textInput(), $form->field($model, 'email')->textInput(), $form->field($model, 'status')->checkbox(array('label'=>'enable')), '<div class="form-group">',Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']); ActiveForm::end(); echo'</div>';