|  |  |  | <?php
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * @link http://www.yiiframework.com/
 | 
					
						
							|  |  |  |  * @copyright Copyright (c) 2008 Yii Software LLC
 | 
					
						
							|  |  |  |  * @license http://www.yiiframework.com/license/
 | 
					
						
							|  |  |  |  */
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace yii\bootstrap;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use Yii;
 | 
					
						
							|  |  |  | use yii\base\InvalidConfigException;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * A Bootstrap 3 enhanced version of [[\yii\widgets\ActiveForm]].
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * This class mainly adds the [[layout]] property to choose a Bootstrap 3 form layout.
 | 
					
						
							|  |  |  |  * So for example to render a horizontal form you would:
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * ```php
 | 
					
						
							|  |  |  |  * use yii\bootstrap\ActiveForm;
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * $form = ActiveForm::begin(['layout' => 'horizontal'])
 | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * This will set default values for the [[ActiveField]]
 | 
					
						
							|  |  |  |  * to render horizontal form fields. In particular the [[ActiveField::template|template]]
 | 
					
						
							|  |  |  |  * is set to `{label} {beginWrapper} {input} {error} {endWrapper} {hint}` and the
 | 
					
						
							|  |  |  |  * [[ActiveField::horizontalCssClasses|horizontalCssClasses]] are set to:
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * ```php
 | 
					
						
							|  |  |  |  * [
 | 
					
						
							|  |  |  |  *     'offset' => 'col-sm-offset-3',
 | 
					
						
							|  |  |  |  *     'label' => 'col-sm-3',
 | 
					
						
							|  |  |  |  *     'wrapper' => 'col-sm-6',
 | 
					
						
							|  |  |  |  *     'error' => '',
 | 
					
						
							|  |  |  |  *     'hint' => 'col-sm-3',
 | 
					
						
							|  |  |  |  * ]
 | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * To get a different column layout in horizontal mode you can modify those options
 | 
					
						
							|  |  |  |  * through [[fieldConfig]]:
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * ```php
 | 
					
						
							|  |  |  |  * $form = ActiveForm::begin([
 | 
					
						
							|  |  |  |  *     'layout' => 'horizontal',
 | 
					
						
							|  |  |  |  *     'fieldConfig' => [
 | 
					
						
							|  |  |  |  *         'template' => "{label}\n{beginWrapper}\n{input}\n{hint}\n{error}\n{endWrapper}",
 | 
					
						
							|  |  |  |  *         'horizontalCssClasses' => [
 | 
					
						
							|  |  |  |  *             'label' => 'col-sm-4',
 | 
					
						
							|  |  |  |  *             'offset' => 'col-sm-offset-4',
 | 
					
						
							|  |  |  |  *             'wrapper' => 'col-sm-8',
 | 
					
						
							|  |  |  |  *             'error' => '',
 | 
					
						
							|  |  |  |  *             'hint' => '',
 | 
					
						
							|  |  |  |  *         ],
 | 
					
						
							|  |  |  |  *     ],
 | 
					
						
							|  |  |  |  * ]);
 | 
					
						
							|  |  |  |  * ```
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * @see ActiveField for details on the [[fieldConfig]] options
 | 
					
						
							|  |  |  |  * @see http://getbootstrap.com/css/#forms
 | 
					
						
							|  |  |  |  *
 | 
					
						
							|  |  |  |  * @author Michael Härtl <haertl.mike@gmail.com>
 | 
					
						
							|  |  |  |  * @since 2.0
 | 
					
						
							|  |  |  |  */
 | 
					
						
							|  |  |  | class ActiveForm extends \yii\widgets\ActiveForm
 | 
					
						
							|  |  |  | {
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @var string the default field class name when calling [[field()]] to create a new field.
 | 
					
						
							|  |  |  |      * @see fieldConfig
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public $fieldClass = 'yii\bootstrap\ActiveField';
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @var array HTML attributes for the form tag. Default is `['role' => 'form']`.
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public $options = ['role' => 'form'];
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @var string the form layout. Either 'default', 'horizontal' or 'inline'.
 | 
					
						
							|  |  |  |      * By choosing a layout, an appropriate default field configuration is applied. This will
 | 
					
						
							|  |  |  |      * render the form fields with slightly different markup for each layout. You can
 | 
					
						
							|  |  |  |      * override these defaults through [[fieldConfig]].
 | 
					
						
							|  |  |  |      * @see \yii\bootstrap\ActiveField for details on Bootstrap 3 field configuration
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public $layout = 'default';
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @inheritdoc
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public function init()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         if (!in_array($this->layout, ['default', 'horizontal', 'inline'])) {
 | 
					
						
							|  |  |  |             throw new InvalidConfigException('Invalid layout type: ' . $this->layout);
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($this->layout !== 'default') {
 | 
					
						
							|  |  |  |             Html::addCssClass($this->options, 'form-' . $this->layout);
 | 
					
						
							|  |  |  |         }
 | 
					
						
							|  |  |  |         parent::init();
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /**
 | 
					
						
							|  |  |  |      * @inheritdoc
 | 
					
						
							|  |  |  |      * @return ActiveField the created ActiveField object
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     public function field($model, $attribute, $options = [])
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |         return parent::field($model, $attribute, $options);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | }
 |