ตามปกติ 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>';