Commit 65352e50 by Qiang Xue

refactored ActiveField.

parent 3adffc9c
...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(array('id' => 'login-form')); ?> <?php $form = ActiveForm::begin(array('id' => 'login-form')); ?>
<?php echo $form->field($model, 'username')->textInput(); ?> <?php echo $form->field($model, 'username'); ?>
<?php echo $form->field($model, 'password')->passwordInput(); ?> <?php echo $form->field($model, 'password')->passwordInput(); ?>
<?php echo $form->field($model, 'rememberMe')->checkbox(); ?> <?php echo $form->field($model, 'rememberMe')->checkbox(); ?>
<div class="form-actions"> <div class="form-actions">
......
...@@ -21,9 +21,9 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -21,9 +21,9 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(array('id' => 'contact-form')); ?> <?php $form = ActiveForm::begin(array('id' => 'contact-form')); ?>
<?php echo $form->field($model, 'name')->textInput(); ?> <?php echo $form->field($model, 'name'); ?>
<?php echo $form->field($model, 'email')->textInput(); ?> <?php echo $form->field($model, 'email'); ?>
<?php echo $form->field($model, 'subject')->textInput(); ?> <?php echo $form->field($model, 'subject'); ?>
<?php echo $form->field($model, 'body')->textArea(array('rows' => 6)); ?> <?php echo $form->field($model, 'body')->textArea(array('rows' => 6)); ?>
<?php echo $form->field($model, 'verifyCode')->widget(Captcha::className(), array( <?php echo $form->field($model, 'verifyCode')->widget(Captcha::className(), array(
'options' => array('class' => 'form-control'), 'options' => array('class' => 'form-control'),
......
...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(array('id' => 'login-form')); ?> <?php $form = ActiveForm::begin(array('id' => 'login-form')); ?>
<?php echo $form->field($model, 'username')->textInput(); ?> <?php echo $form->field($model, 'username'); ?>
<?php echo $form->field($model, 'password')->passwordInput(); ?> <?php echo $form->field($model, 'password')->passwordInput(); ?>
<?php echo $form->field($model, 'rememberMe')->checkbox(); ?> <?php echo $form->field($model, 'rememberMe')->checkbox(); ?>
<div style="color:#999;margin:1em 0"> <div style="color:#999;margin:1em 0">
......
...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(array('id' => 'request-password-reset-form')); ?> <?php $form = ActiveForm::begin(array('id' => 'request-password-reset-form')); ?>
<?php echo $form->field($model, 'email')->textInput(); ?> <?php echo $form->field($model, 'email'); ?>
<div class="form-actions"> <div class="form-actions">
<?php echo Html::submitButton('Send', array('class' => 'btn btn-primary')); ?> <?php echo Html::submitButton('Send', array('class' => 'btn btn-primary')); ?>
</div> </div>
......
...@@ -18,8 +18,8 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -18,8 +18,8 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(array('id' => 'form-signup')); ?> <?php $form = ActiveForm::begin(array('id' => 'form-signup')); ?>
<?php echo $form->field($model, 'username')->textInput(); ?> <?php echo $form->field($model, 'username'); ?>
<?php echo $form->field($model, 'email')->textInput(); ?> <?php echo $form->field($model, 'email'); ?>
<?php echo $form->field($model, 'password')->passwordInput(); ?> <?php echo $form->field($model, 'password')->passwordInput(); ?>
<div class="form-actions"> <div class="form-actions">
<?php echo Html::submitButton('Signup', array('class' => 'btn btn-primary')); ?> <?php echo Html::submitButton('Signup', array('class' => 'btn btn-primary')); ?>
......
...@@ -29,9 +29,9 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -29,9 +29,9 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-5"> <div class="col-lg-5">
<?php $form = ActiveForm::begin(array('id' => 'contact-form')); ?> <?php $form = ActiveForm::begin(array('id' => 'contact-form')); ?>
<?php echo $form->field($model, 'name')->textInput(); ?> <?php echo $form->field($model, 'name'); ?>
<?php echo $form->field($model, 'email')->textInput(); ?> <?php echo $form->field($model, 'email'); ?>
<?php echo $form->field($model, 'subject')->textInput(); ?> <?php echo $form->field($model, 'subject'); ?>
<?php echo $form->field($model, 'body')->textArea(array('rows' => 6)); ?> <?php echo $form->field($model, 'body')->textArea(array('rows' => 6)); ?>
<?php echo $form->field($model, 'verifyCode')->widget(Captcha::className(), array( <?php echo $form->field($model, 'verifyCode')->widget(Captcha::className(), array(
'options' => array('class' => 'form-control'), 'options' => array('class' => 'form-control'),
......
...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -18,7 +18,7 @@ $this->params['breadcrumbs'][] = $this->title;
<div class="row"> <div class="row">
<div class="col-lg-3"> <div class="col-lg-3">
<?php $form = ActiveForm::begin(array('id' => 'login-form')); ?> <?php $form = ActiveForm::begin(array('id' => 'login-form')); ?>
<?php echo $form->field($model, 'username')->textInput(); ?> <?php echo $form->field($model, 'username'); ?>
<?php echo $form->field($model, 'password')->passwordInput(); ?> <?php echo $form->field($model, 'password')->passwordInput(); ?>
<?php echo $form->field($model, 'rememberMe')->checkbox(); ?> <?php echo $form->field($model, 'rememberMe')->checkbox(); ?>
<div class="form-actions"> <div class="form-actions">
......
...@@ -331,12 +331,12 @@ introduces the class map (via `Yii::$classMap`) to overcome this difficulty. ...@@ -331,12 +331,12 @@ introduces the class map (via `Yii::$classMap`) to overcome this difficulty.
------------ ------------
Yii 2.0 introduces the *field* concept for building a form using `ActiveForm`. A field Yii 2.0 introduces the *field* concept for building a form using `ActiveForm`. A field
is a container consisting of a label, an input, and an error message. It is represented is a container consisting of a label, an input, an error message, and/or a hint text.
as an `ActiveField` object. Using fields, you can build a form more cleanly than before: It is represented as an `ActiveField` object. Using fields, you can build a form more cleanly than before:
```php ```php
<?php $form = yii\widgets\ActiveForm::begin(); ?> <?php $form = yii\widgets\ActiveForm::begin(); ?>
<?php echo $form->field($model, 'username')->textInput(); ?> <?php echo $form->field($model, 'username'); ?>
<?php echo $form->field($model, 'password')->passwordInput(); ?> <?php echo $form->field($model, 'password')->passwordInput(); ?>
<div class="form-actions"> <div class="form-actions">
<?php echo Html::submitButton('Login'); ?> <?php echo Html::submitButton('Login'); ?>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
* // ... private functions and properties go here ... * // ... private functions and properties go here ...
* *
* return pub; * return pub;
* }); * })(jQuery);
* ~~~ * ~~~
* *
* Using this structure, you can define public and private functions/properties for a module. * Using this structure, you can define public and private functions/properties for a module.
......
...@@ -25,7 +25,7 @@ $this->title = 'Yii Debugger'; ...@@ -25,7 +25,7 @@ $this->title = 'Yii Debugger';
<th style="width: 120px;">Tag</th> <th style="width: 120px;">Tag</th>
<th style="width: 170px;">Time</th> <th style="width: 170px;">Time</th>
<th style="width: 120px;">IP</th> <th style="width: 120px;">IP</th>
<th style="width: 60px;">Method</th> <th style="width: 70px;">Method</th>
<th>URL</th> <th>URL</th>
</tr> </tr>
</thead> </thead>
......
...@@ -725,8 +725,10 @@ class HtmlBase ...@@ -725,8 +725,10 @@ class HtmlBase
* @param string|array $selection the selected value(s). * @param string|array $selection the selected value(s).
* @param array $items the data item used to generate the checkboxes. * @param array $items the data item used to generate the checkboxes.
* The array keys are the labels, while the array values are the corresponding checkbox values. * The array keys are the labels, while the array values are the corresponding checkbox values.
* @param array $options options (name => config) for the checkbox list. The following options are supported: * @param array $options options (name => config) for the checkbox list container tag.
* The following options are specially handled:
* *
* - tag: string, the tag name of the container element.
* - unselect: string, the value that should be submitted when none of the checkboxes is selected. * - unselect: string, the value that should be submitted when none of the checkboxes is selected.
* By setting this option, a hidden input will be generated. * By setting this option, a hidden input will be generated.
* - encode: boolean, whether to HTML-encode the checkbox labels. Defaults to true. * - encode: boolean, whether to HTML-encode the checkbox labels. Defaults to true.
...@@ -778,7 +780,10 @@ class HtmlBase ...@@ -778,7 +780,10 @@ class HtmlBase
} }
$separator = isset($options['separator']) ? $options['separator'] : "\n"; $separator = isset($options['separator']) ? $options['separator'] : "\n";
return $hidden . implode($separator, $lines); $tag = isset($options['tag']) ? $options['tag'] : 'div';
unset($options['tag'], $options['unselect'], $options['encode'], $options['separator'], $options['item']);
return $hidden . static::tag($tag, implode($separator, $lines), $options);
} }
/** /**
...@@ -836,7 +841,10 @@ class HtmlBase ...@@ -836,7 +841,10 @@ class HtmlBase
$hidden = ''; $hidden = '';
} }
return $hidden . implode($separator, $lines); $tag = isset($options['tag']) ? $options['tag'] : 'div';
unset($options['tag'], $options['unselect'], $options['encode'], $options['separator'], $options['item']);
return $hidden . static::tag($tag, implode($separator, $lines), $options);
} }
/** /**
...@@ -945,7 +953,7 @@ class HtmlBase ...@@ -945,7 +953,7 @@ class HtmlBase
* *
* The following options are specially handled: * The following options are specially handled:
* *
* - tag: this specifies the tag name. If not set, "p" will be used. * - tag: this specifies the tag name. If not set, "div" will be used.
* *
* @return string the generated label tag * @return string the generated label tag
*/ */
...@@ -953,7 +961,7 @@ class HtmlBase ...@@ -953,7 +961,7 @@ class HtmlBase
{ {
$attribute = static::getAttributeName($attribute); $attribute = static::getAttributeName($attribute);
$error = $model->getFirstError($attribute); $error = $model->getFirstError($attribute);
$tag = isset($options['tag']) ? $options['tag'] : 'p'; $tag = isset($options['tag']) ? $options['tag'] : 'div';
unset($options['tag']); unset($options['tag']);
return Html::tag($tag, Html::encode($error), $options); return Html::tag($tag, Html::encode($error), $options);
} }
...@@ -1066,7 +1074,6 @@ class HtmlBase ...@@ -1066,7 +1074,6 @@ class HtmlBase
/** /**
* Generates a radio button tag for the given model attribute. * Generates a radio button tag for the given model attribute.
* This method will generate the "name" tag attribute automatically unless it is explicitly specified in `$options`.
* This method will generate the "checked" tag attribute according to the model attribute value. * This method will generate the "checked" tag attribute according to the model attribute value.
* @param Model $model the model object * @param Model $model the model object
* @param string $attribute the attribute name or expression. See [[getAttributeName()]] for the format * @param string $attribute the attribute name or expression. See [[getAttributeName()]] for the format
...@@ -1102,7 +1109,6 @@ class HtmlBase ...@@ -1102,7 +1109,6 @@ class HtmlBase
/** /**
* Generates a checkbox tag for the given model attribute. * Generates a checkbox tag for the given model attribute.
* This method will generate the "name" tag attribute automatically unless it is explicitly specified in `$options`.
* This method will generate the "checked" tag attribute according to the model attribute value. * This method will generate the "checked" tag attribute according to the model attribute value.
* @param Model $model the model object * @param Model $model the model object
* @param string $attribute the attribute name or expression. See [[getAttributeName()]] for the format * @param string $attribute the attribute name or expression. See [[getAttributeName()]] for the format
...@@ -1267,6 +1273,9 @@ class HtmlBase ...@@ -1267,6 +1273,9 @@ class HtmlBase
if (!array_key_exists('unselect', $options)) { if (!array_key_exists('unselect', $options)) {
$options['unselect'] = '0'; $options['unselect'] = '0';
} }
if (!array_key_exists('id', $options)) {
$options['id'] = static::getInputId($model, $attribute);
}
return static::checkboxList($name, $checked, $items, $options); return static::checkboxList($name, $checked, $items, $options);
} }
...@@ -1304,6 +1313,9 @@ class HtmlBase ...@@ -1304,6 +1313,9 @@ class HtmlBase
if (!array_key_exists('unselect', $options)) { if (!array_key_exists('unselect', $options)) {
$options['unselect'] = '0'; $options['unselect'] = '0';
} }
if (!array_key_exists('id', $options)) {
$options['id'] = static::getInputId($model, $attribute);
}
return static::radioList($name, $checked, $items, $options); return static::radioList($name, $checked, $items, $options);
} }
......
...@@ -322,23 +322,23 @@ EOD; ...@@ -322,23 +322,23 @@ EOD;
public function testCheckboxList() public function testCheckboxList()
{ {
$this->assertEquals('', Html::checkboxList('test')); $this->assertEquals('<div></div>', Html::checkboxList('test'));
$expected = <<<EOD $expected = <<<EOD
<div class="checkbox"><label><input type="checkbox" name="test[]" value="value1"> text1</label></div> <div><div class="checkbox"><label><input type="checkbox" name="test[]" value="value1"> text1</label></div>
<div class="checkbox"><label><input type="checkbox" name="test[]" value="value2" checked> text2</label></div> <div class="checkbox"><label><input type="checkbox" name="test[]" value="value2" checked> text2</label></div></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems())); $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems()));
$expected = <<<EOD $expected = <<<EOD
<div class="checkbox"><label><input type="checkbox" name="test[]" value="value1&lt;&gt;"> text1&lt;&gt;</label></div> <div><div class="checkbox"><label><input type="checkbox" name="test[]" value="value1&lt;&gt;"> text1&lt;&gt;</label></div>
<div class="checkbox"><label><input type="checkbox" name="test[]" value="value 2"> text 2</label></div> <div class="checkbox"><label><input type="checkbox" name="test[]" value="value 2"> text 2</label></div></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems2())); $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems2()));
$expected = <<<EOD $expected = <<<EOD
<input type="hidden" name="test" value="0"><div class="checkbox"><label><input type="checkbox" name="test[]" value="value1"> text1</label></div><br> <input type="hidden" name="test" value="0"><div><div class="checkbox"><label><input type="checkbox" name="test[]" value="value1"> text1</label></div><br>
<div class="checkbox"><label><input type="checkbox" name="test[]" value="value2" checked> text2</label></div> <div class="checkbox"><label><input type="checkbox" name="test[]" value="value2" checked> text2</label></div></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems(), array( $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems(), array(
'separator' => "<br>\n", 'separator' => "<br>\n",
...@@ -346,8 +346,8 @@ EOD; ...@@ -346,8 +346,8 @@ EOD;
))); )));
$expected = <<<EOD $expected = <<<EOD
0<label>text1 <input type="checkbox" name="test[]" value="value1"></label> <div>0<label>text1 <input type="checkbox" name="test[]" value="value1"></label>
1<label>text2 <input type="checkbox" name="test[]" value="value2" checked></label> 1<label>text2 <input type="checkbox" name="test[]" value="value2" checked></label></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems(), array( $this->assertEqualsWithoutLE($expected, Html::checkboxList('test', array('value2'), $this->getDataItems(), array(
'item' => function ($index, $label, $name, $checked, $value) { 'item' => function ($index, $label, $name, $checked, $value) {
...@@ -358,23 +358,23 @@ EOD; ...@@ -358,23 +358,23 @@ EOD;
public function testRadioList() public function testRadioList()
{ {
$this->assertEquals('', Html::radioList('test')); $this->assertEquals('<div></div>', Html::radioList('test'));
$expected = <<<EOD $expected = <<<EOD
<div class="radio"><label><input type="radio" name="test" value="value1"> text1</label></div> <div><div class="radio"><label><input type="radio" name="test" value="value1"> text1</label></div>
<div class="radio"><label><input type="radio" name="test" value="value2" checked> text2</label></div> <div class="radio"><label><input type="radio" name="test" value="value2" checked> text2</label></div></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems())); $this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems()));
$expected = <<<EOD $expected = <<<EOD
<div class="radio"><label><input type="radio" name="test" value="value1&lt;&gt;"> text1&lt;&gt;</label></div> <div><div class="radio"><label><input type="radio" name="test" value="value1&lt;&gt;"> text1&lt;&gt;</label></div>
<div class="radio"><label><input type="radio" name="test" value="value 2"> text 2</label></div> <div class="radio"><label><input type="radio" name="test" value="value 2"> text 2</label></div></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems2())); $this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems2()));
$expected = <<<EOD $expected = <<<EOD
<input type="hidden" name="test" value="0"><div class="radio"><label><input type="radio" name="test" value="value1"> text1</label></div><br> <input type="hidden" name="test" value="0"><div><div class="radio"><label><input type="radio" name="test" value="value1"> text1</label></div><br>
<div class="radio"><label><input type="radio" name="test" value="value2" checked> text2</label></div> <div class="radio"><label><input type="radio" name="test" value="value2" checked> text2</label></div></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems(), array( $this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems(), array(
'separator' => "<br>\n", 'separator' => "<br>\n",
...@@ -382,8 +382,8 @@ EOD; ...@@ -382,8 +382,8 @@ EOD;
))); )));
$expected = <<<EOD $expected = <<<EOD
0<label>text1 <input type="radio" name="test" value="value1"></label> <div>0<label>text1 <input type="radio" name="test" value="value1"></label>
1<label>text2 <input type="radio" name="test" value="value2" checked></label> 1<label>text2 <input type="radio" name="test" value="value2" checked></label></div>
EOD; EOD;
$this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems(), array( $this->assertEqualsWithoutLE($expected, Html::radioList('test', array('value2'), $this->getDataItems(), array(
'item' => function ($index, $label, $name, $checked, $value) { 'item' => function ($index, $label, $name, $checked, $value) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment