Commit aadcb59c by Qiang Xue

Added ActiveField::widget().

parent 23611127
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
*/ */
namespace yii\widgets; namespace yii\widgets;
use Yii;
use yii\base\Component; use yii\base\Component;
use yii\db\ActiveRecord; use yii\db\ActiveRecord;
use yii\helpers\Html; use yii\helpers\Html;
...@@ -101,6 +102,11 @@ class ActiveField extends Component ...@@ -101,6 +102,11 @@ class ActiveField extends Component
*/ */
public $selectors; public $selectors;
/**
* Renders the opening tag of the field container.
* @return string the rendering result.
*/
public function begin() public function begin()
{ {
$options = $this->getClientOptions(); $options = $this->getClientOptions();
...@@ -124,11 +130,19 @@ class ActiveField extends Component ...@@ -124,11 +130,19 @@ class ActiveField extends Component
return Html::beginTag($this->tag, $options); return Html::beginTag($this->tag, $options);
} }
/**
* Renders the closing tag of the field container.
* @return string the rendering result.
*/
public function end() public function end()
{ {
return Html::endTag($this->tag); return Html::endTag($this->tag);
} }
/**
* Returns the JS options for the field.
* @return array the JS options
*/
protected function getClientOptions() protected function getClientOptions()
{ {
$enableClientValidation = $this->enableClientValidation || $this->enableClientValidation === null && $this->form->enableClientValidation; $enableClientValidation = $this->enableClientValidation || $this->enableClientValidation === null && $this->form->enableClientValidation;
...@@ -237,7 +251,7 @@ class ActiveField extends Component ...@@ -237,7 +251,7 @@ class ActiveField extends Component
} }
/** /**
* Generates an input tag for the given model attribute. * Renders a field containing an input field.
* @param string $type the input type (e.g. 'text', 'password') * @param string $type the input type (e.g. 'text', 'password')
* @param array $options the tag options in terms of name-value pairs. These will be rendered as * @param array $options the tag options in terms of name-value pairs. These will be rendered as
* the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]]. * the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
...@@ -250,12 +264,12 @@ class ActiveField extends Component ...@@ -250,12 +264,12 @@ class ActiveField extends Component
} }
/** /**
* Generates a text input tag for the given model attribute. * Renders a field containing a text input.
* This method will generate the "name" and "value" tag attributes automatically for the model attribute * This method will generate the "name" and "value" tag attributes automatically for the model attribute
* unless they are explicitly specified in `$options`. * unless they are explicitly specified in `$options`.
* @param array $options the tag options in terms of name-value pairs. These will be rendered as * @param array $options the tag options in terms of name-value pairs. These will be rendered as
* the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]]. * the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
* @return string the generated input tag * @return string the rendering result
*/ */
public function textInput($options = array()) public function textInput($options = array())
{ {
...@@ -264,12 +278,12 @@ class ActiveField extends Component ...@@ -264,12 +278,12 @@ class ActiveField extends Component
} }
/** /**
* Generates a hidden input tag for the given model attribute. * Renders a field containing a hidden input.
* This method will generate the "name" and "value" tag attributes automatically for the model attribute * This method will generate the "name" and "value" tag attributes automatically for the model attribute
* unless they are explicitly specified in `$options`. * unless they are explicitly specified in `$options`.
* @param array $options the tag options in terms of name-value pairs. These will be rendered as * @param array $options the tag options in terms of name-value pairs. These will be rendered as
* the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]]. * the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
* @return string the generated input tag * @return string the rendering result
*/ */
public function hiddenInput($options = array()) public function hiddenInput($options = array())
{ {
...@@ -278,12 +292,12 @@ class ActiveField extends Component ...@@ -278,12 +292,12 @@ class ActiveField extends Component
} }
/** /**
* Generates a password input tag for the given model attribute. * Renders a field containing a password input.
* This method will generate the "name" and "value" tag attributes automatically for the model attribute * This method will generate the "name" and "value" tag attributes automatically for the model attribute
* unless they are explicitly specified in `$options`. * unless they are explicitly specified in `$options`.
* @param array $options the tag options in terms of name-value pairs. These will be rendered as * @param array $options the tag options in terms of name-value pairs. These will be rendered as
* the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]]. * the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
* @return string the generated input tag * @return string the rendering result
*/ */
public function passwordInput($options = array()) public function passwordInput($options = array())
{ {
...@@ -292,12 +306,12 @@ class ActiveField extends Component ...@@ -292,12 +306,12 @@ class ActiveField extends Component
} }
/** /**
* Generates a file input tag for the given model attribute. * Renders a field containing a file input.
* This method will generate the "name" and "value" tag attributes automatically for the model attribute * This method will generate the "name" and "value" tag attributes automatically for the model attribute
* unless they are explicitly specified in `$options`. * unless they are explicitly specified in `$options`.
* @param array $options the tag options in terms of name-value pairs. These will be rendered as * @param array $options the tag options in terms of name-value pairs. These will be rendered as
* the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]]. * the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
* @return string the generated input tag * @return string the rendering result
*/ */
public function fileInput($options = array()) public function fileInput($options = array())
{ {
...@@ -306,11 +320,11 @@ class ActiveField extends Component ...@@ -306,11 +320,11 @@ class ActiveField extends Component
} }
/** /**
* Generates a textarea tag for the given model attribute. * Renders a field containing a text area.
* The model attribute value will be used as the content in the textarea. * The model attribute value will be used as the content in the textarea.
* @param array $options the tag options in terms of name-value pairs. These will be rendered as * @param array $options the tag options in terms of name-value pairs. These will be rendered as
* the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]]. * the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
* @return string the generated textarea tag * @return string the rendering result
*/ */
public function textarea($options = array()) public function textarea($options = array())
{ {
...@@ -319,7 +333,7 @@ class ActiveField extends Component ...@@ -319,7 +333,7 @@ class ActiveField extends Component
} }
/** /**
* Generates a radio button tag for the given model attribute. * Renders a field containing a radio button.
* This method will generate the "name" tag attribute automatically unless it is explicitly specified in `$options`. * 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 array $options the tag options in terms of name-value pairs. The following options are specially handled: * @param array $options the tag options in terms of name-value pairs. The following options are specially handled:
...@@ -334,7 +348,7 @@ class ActiveField extends Component ...@@ -334,7 +348,7 @@ class ActiveField extends Component
* @param boolean $enclosedByLabel whether to enclose the radio within the label. * @param boolean $enclosedByLabel whether to enclose the radio within the label.
* If true, the method will still use [[template]] to layout the checkbox and the error message * If true, the method will still use [[template]] to layout the checkbox and the error message
* except that the radio is enclosed by the label tag. * except that the radio is enclosed by the label tag.
* @return string the generated radio button tag * @return string the rendering result
*/ */
public function radio($options = array(), $enclosedByLabel = true) public function radio($options = array(), $enclosedByLabel = true)
{ {
...@@ -358,7 +372,7 @@ class ActiveField extends Component ...@@ -358,7 +372,7 @@ class ActiveField extends Component
} }
/** /**
* Generates a checkbox tag for the given model attribute. * Renders a field containing a checkbox.
* This method will generate the "name" tag attribute automatically unless it is explicitly specified in `$options`. * 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 array $options the tag options in terms of name-value pairs. The following options are specially handled: * @param array $options the tag options in terms of name-value pairs. The following options are specially handled:
...@@ -373,7 +387,7 @@ class ActiveField extends Component ...@@ -373,7 +387,7 @@ class ActiveField extends Component
* @param boolean $enclosedByLabel whether to enclose the checkbox within the label. * @param boolean $enclosedByLabel whether to enclose the checkbox within the label.
* If true, the method will still use [[template]] to layout the checkbox and the error message * If true, the method will still use [[template]] to layout the checkbox and the error message
* except that the checkbox is enclosed by the label tag. * except that the checkbox is enclosed by the label tag.
* @return string the generated checkbox tag * @return string the rendering result
*/ */
public function checkbox($options = array(), $enclosedByLabel = true) public function checkbox($options = array(), $enclosedByLabel = true)
{ {
...@@ -397,7 +411,7 @@ class ActiveField extends Component ...@@ -397,7 +411,7 @@ class ActiveField extends Component
} }
/** /**
* Generates a drop-down list for the given model attribute. * Renders a field containing a drop-down list.
* The selection of the drop-down list is taken from the value of the model attribute. * The selection of the drop-down list is taken from the value of the model attribute.
* @param array $items the option data items. The array keys are option values, and the array values * @param array $items the option data items. The array keys are option values, and the array values
* are the corresponding option labels. The array can also be nested (i.e. some array values are arrays too). * are the corresponding option labels. The array can also be nested (i.e. some array values are arrays too).
...@@ -426,7 +440,7 @@ class ActiveField extends Component ...@@ -426,7 +440,7 @@ class ActiveField extends Component
* The rest of the options will be rendered as the attributes of the resulting tag. The values will * The rest of the options will be rendered as the attributes of the resulting tag. The values will
* be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered. * be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered.
* *
* @return string the generated drop-down list tag * @return string the rendering result
*/ */
public function dropDownList($items, $options = array()) public function dropDownList($items, $options = array())
{ {
...@@ -435,7 +449,7 @@ class ActiveField extends Component ...@@ -435,7 +449,7 @@ class ActiveField extends Component
} }
/** /**
* Generates a list box. * Renders a field containing a list box.
* The selection of the list box is taken from the value of the model attribute. * The selection of the list box is taken from the value of the model attribute.
* @param array $items the option data items. The array keys are option values, and the array values * @param array $items the option data items. The array keys are option values, and the array values
* are the corresponding option labels. The array can also be nested (i.e. some array values are arrays too). * are the corresponding option labels. The array can also be nested (i.e. some array values are arrays too).
...@@ -467,7 +481,7 @@ class ActiveField extends Component ...@@ -467,7 +481,7 @@ class ActiveField extends Component
* The rest of the options will be rendered as the attributes of the resulting tag. The values will * The rest of the options will be rendered as the attributes of the resulting tag. The values will
* be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered. * be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered.
* *
* @return string the generated list box tag * @return string the rendering result
*/ */
public function listBox($items, $options = array()) public function listBox($items, $options = array())
{ {
...@@ -476,7 +490,7 @@ class ActiveField extends Component ...@@ -476,7 +490,7 @@ class ActiveField extends Component
} }
/** /**
* Generates a list of checkboxes. * Renders a field containing a list of checkboxes.
* A checkbox list allows multiple selection, like [[listBox()]]. * A checkbox list allows multiple selection, like [[listBox()]].
* As a result, the corresponding submitted value is an array. * As a result, the corresponding submitted value is an array.
* The selection of the checkbox list is taken from the value of the model attribute. * The selection of the checkbox list is taken from the value of the model attribute.
...@@ -498,7 +512,7 @@ class ActiveField extends Component ...@@ -498,7 +512,7 @@ class ActiveField extends Component
* where $index is the zero-based index of the checkbox in the whole list; $label * where $index is the zero-based index of the checkbox in the whole list; $label
* is the label for the checkbox; and $name, $value and $checked represent the name, * is the label for the checkbox; and $name, $value and $checked represent the name,
* value and the checked status of the checkbox input. * value and the checked status of the checkbox input.
* @return string the generated checkbox list * @return string the rendering result
*/ */
public function checkboxList($items, $options = array()) public function checkboxList($items, $options = array())
{ {
...@@ -510,7 +524,7 @@ class ActiveField extends Component ...@@ -510,7 +524,7 @@ class ActiveField extends Component
} }
/** /**
* Generates a list of radio buttons. * Renders a field containing a list of radio buttons.
* A radio button list is like a checkbox list, except that it only allows single selection. * A radio button list is like a checkbox list, except that it only allows single selection.
* The selection of the radio buttons is taken from the value of the model attribute. * The selection of the radio buttons is taken from the value of the model attribute.
* @param array $items the data item used to generate the radio buttons. * @param array $items the data item used to generate the radio buttons.
...@@ -531,7 +545,7 @@ class ActiveField extends Component ...@@ -531,7 +545,7 @@ class ActiveField extends Component
* where $index is the zero-based index of the radio button in the whole list; $label * where $index is the zero-based index of the radio button in the whole list; $label
* is the label for the radio button; and $name, $value and $checked represent the name, * is the label for the radio button; and $name, $value and $checked represent the name,
* value and the checked status of the radio button input. * value and the checked status of the radio button input.
* @return string the generated radio button list * @return string the rendering result
*/ */
public function radioList($items, $options = array()) public function radioList($items, $options = array())
{ {
...@@ -541,4 +555,16 @@ class ActiveField extends Component ...@@ -541,4 +555,16 @@ class ActiveField extends Component
. '</div>' . '</div>'
); );
} }
/**
* Renders a field containing a widget.
* @param string $class the widget class name
* @param array $config name-value pairs that will be used to initialize the widget
* @return string the rendering result
*/
public function widget($class, $config = array())
{
/** @var \yii\base\Widget $class */
return $this->render($class::widget($config));
}
} }
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