类 yii\widgets\ActiveField
继承关系 | yii\widgets\ActiveField » yii\base\Component » yii\base\BaseObject |
---|---|
实现接口 | yii\base\Configurable |
可用版本 | 2.0 |
源代码 | https://github.com/yiisoft/yii2/blob/master/framework/widgets/ActiveField.php |
ActiveField 代表 yii\widgets\ActiveForm 中的一个表单输入字段。
有关 ActiveField 的更多详细信息和用法信息,请参阅 表单指南文章。
公共属性
公共方法
受保护方法
方法 | 描述 | 定义于 |
---|---|---|
addAriaAttributes() | 向输入选项添加 aria 属性。 | yii\widgets\ActiveField |
addErrorClassIfNeeded() | 根据需要向输入选项添加验证类。 | yii\widgets\ActiveField |
addRoleAttributes() | 向输入选项添加角色属性 | yii\widgets\ActiveField |
adjustLabelFor() | 根据输入选项调整标签的 for 属性。 |
yii\widgets\ActiveField |
getClientOptions() | 返回字段的 JS 选项。 | yii\widgets\ActiveField |
getInputId() | 返回此表单字段的输入元素的 HTML id 。 |
yii\widgets\ActiveField |
isAjaxValidationEnabled() | 检查字段是否启用了 ajax 验证。 | yii\widgets\ActiveField |
isClientValidationEnabled() | 检查字段是否启用了客户端验证。 | yii\widgets\ActiveField |
属性详情
为输入添加 aria HTML 属性 aria-required
和 aria-invalid
是否启用基于 AJAX 的数据验证。如果未设置,它将采用 yii\widgets\ActiveForm::$enableAjaxValidation 的值。
是否启用客户端数据验证。如果未设置,它将采用 yii\widgets\ActiveForm::$enableClientValidation 的值。
错误标签的默认选项。传递给 error() 的参数将在渲染错误标签时与此属性合并。以下特殊选项被识别
tag
: 容器元素的标签名称。默认为div
。将其设置为false
将不会渲染容器标签。另请参阅 yii\helpers\Html::tag()。encode
: 是否对错误输出进行编码。默认为true
。
如果为错误元素设置了自定义 id
,则可能需要相应地调整 $selectors。
另请参阅 yii\helpers\Html::renderTagAttributes(),了解有关如何渲染属性的详细信息。
提示标签的默认选项。传递给 hint() 的参数将在渲染提示标签时与此属性合并。以下特殊选项被识别
tag
: 容器元素的标签名称。默认为div
。将其设置为false
将不会渲染容器标签。另请参阅 yii\helpers\Html::tag()。
另请参阅 yii\helpers\Html::renderTagAttributes(),了解有关如何渲染属性的详细信息。
输入标签的默认选项。传递给各个输入方法(例如 textInput())的参数将在渲染输入标签时与此属性合并。
如果为输入元素设置了自定义 id
,则可能需要相应地调整 $selectors。
另请参阅 yii\helpers\Html::renderTagAttributes(),了解有关如何渲染属性的详细信息。
标签标签的默认选项。传递给 label() 的参数将在渲染标签标签时与此属性合并。
另请参阅 yii\helpers\Html::renderTagAttributes(),了解有关如何渲染属性的详细信息。
字段容器标签的 HTML 属性(名称-值对)。值将使用 yii\helpers\Html::encode() 进行 HTML 编码。如果值为 null
,则不会渲染相应的属性。以下特殊选项被识别
tag
: 容器元素的标签名称。默认为div
。将其设置为false
将不会渲染容器标签。另请参阅 yii\helpers\Html::tag()。
如果为容器元素设置了自定义 id
,则可能需要相应地调整 $selectors。
另请参阅 yii\helpers\Html::renderTagAttributes(),了解有关如何渲染属性的详细信息。
用于选择容器、输入和错误标签的 jQuery 选择器。数组键应为 container
、input
和/或 error
,数组值为相应的选择器。例如,['input' => '#my-input']
。
容器选择器在表单上下文中使用,而输入和错误选择器在容器上下文中使用。
通常不需要设置此属性,因为默认选择器在大多数情况下都能正常工作。
用于排列标签、输入字段、错误消息和提示文本的模板。调用 render() 时,将替换以下标记:{label}
、{input}
、{error}
和 {hint}
。
当输入字段失去焦点时是否执行验证。如果未设置,它将采用 yii\widgets\ActiveForm::$validateOnBlur 的值。
当输入字段的值发生变化时是否执行验证。如果未设置,它将采用 yii\widgets\ActiveForm::$validateOnChange 的值。
当用户在输入字段中输入时是否执行验证。如果未设置,它将采用 yii\widgets\ActiveForm::$validateOnType 的值。
另请参阅 $validationDelay。
当用户在字段中输入并设置 $validateOnType 为 true
时,验证应延迟的毫秒数。如果未设置,它将采用 yii\widgets\ActiveForm::$validationDelay 的值。
方法详情
定义于: yii\base\Component::__call()
调用不是类方法的命名方法。
此方法将检查任何附加的行为是否具有指定的方法,如果可用,则执行它。
不要直接调用此方法,因为它是一个 PHP 魔术方法,当调用未知方法时会隐式调用。
public 混合类型 __call ( $name, $params ) | ||
$name | string |
方法名 |
$params | array |
方法参数 |
返回值 | 混合类型 |
方法返回值 |
---|---|---|
抛出异常 | yii\base\UnknownMethodException |
调用未知方法时 |
public function __call($name, $params)
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $object) {
if ($object->hasMethod($name)) {
return call_user_func_array([$object, $name], $params);
}
}
throw new UnknownMethodException('Calling unknown method: ' . get_class($this) . "::$name()");
}
public void __clone ( ) |
public function __clone()
{
$this->_events = [];
$this->_eventWildcards = [];
$this->_behaviors = null;
}
定义于: yii\base\BaseObject::__construct()
构造函数。
默认实现执行两件事
- 使用给定的配置
$config
初始化对象。 - 调用 init()。
如果此方法在子类中被覆盖,建议
- 构造函数的最后一个参数是一个配置数组,如这里的
$config
。 - 在构造函数的末尾调用父实现。
public void __construct ( $config = [] ) | ||
$config | array |
将用于初始化对象属性的名称-值对 |
public function __construct($config = [])
{
if (!empty($config)) {
Yii::configure($this, $config);
}
$this->init();
}
定义于: yii\base\Component::__get()
返回组件属性的值。
此方法将按以下顺序检查并相应地采取行动
- 由 getter 定义的属性:返回 getter 结果
- 行为的属性:返回行为属性值
不要直接调用此方法,因为它是一个 PHP 魔术方法,当执行 $value = $component->property;
时会隐式调用。
另请参阅 __set()。
public 混合类型 __get ( $name ) | ||
$name | string |
属性名 |
返回值 | 混合类型 |
属性值或行为属性的值 |
---|---|---|
抛出异常 | yii\base\UnknownPropertyException |
如果未定义属性 |
抛出异常 | yii\base\InvalidCallException |
如果属性是只写属性。 |
public function __get($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
// read property, e.g. getName()
return $this->$getter();
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name;
}
}
if (method_exists($this, 'set' . $name)) {
throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
}
定义于: yii\base\Component::__isset()
检查属性是否已设置,即定义且不为 null。
此方法将按以下顺序检查并相应地采取行动
- 由 setter 定义的属性:返回属性是否已设置
- 行为的属性:返回属性是否已设置
- 对于不存在的属性,返回
false
不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 isset($component->property)
时会被隐式调用。
public boolean __isset ( $name ) | ||
$name | string |
属性名称或事件名称 |
返回值 | boolean |
命名的属性是否已设置 |
---|
public function __isset($name)
{
$getter = 'get' . $name;
if (method_exists($this, $getter)) {
return $this->$getter() !== null;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name)) {
return $behavior->$name !== null;
}
}
return false;
}
定义于: yii\base\Component::__set()
设置组件属性的值。
此方法将按以下顺序检查并相应地采取行动
- 由 setter 定义的属性:设置属性值
- 格式为“on xyz”的事件:将处理程序附加到事件“xyz”
- 格式为“as xyz”的行为:附加名为“xyz”的行为
- 行为的属性:设置行为属性值
不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 $component->property = $value;
时会被隐式调用。
另请参阅 __get()。
public void __set ( $name, $value ) | ||
$name | string |
属性名称或事件名称 |
$value | 混合类型 |
属性值 |
抛出异常 | yii\base\UnknownPropertyException |
如果未定义属性 |
---|---|---|
抛出异常 | yii\base\InvalidCallException |
如果属性是只读的。 |
public function __set($name, $value)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
// set property
$this->$setter($value);
return;
} elseif (strncmp($name, 'on ', 3) === 0) {
// on event: attach event handler
$this->on(trim(substr($name, 3)), $value);
return;
} elseif (strncmp($name, 'as ', 3) === 0) {
// as behavior: attach behavior
$name = trim(substr($name, 3));
$this->attachBehavior($name, $value instanceof Behavior ? $value : Yii::createObject($value));
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = $value;
return;
}
}
if (method_exists($this, 'get' . $name)) {
throw new InvalidCallException('Setting read-only property: ' . get_class($this) . '::' . $name);
}
throw new UnknownPropertyException('Setting unknown property: ' . get_class($this) . '::' . $name);
}
返回此对象的字符串表示形式的 PHP 魔术方法。
public string __toString ( ) | ||
返回值 | string |
此对象的字符串表示形式。 |
---|
public function __toString()
{
// __toString cannot throw exception
// use trigger_error to bypass this limitation
try {
return $this->render();
} catch (\Exception $e) {
ErrorHandler::convertExceptionToError($e);
return '';
} catch (\Throwable $e) {
ErrorHandler::convertExceptionToError($e);
return '';
}
}
定义于: yii\base\Component::__unset()
将组件属性设置为 null。
此方法将按以下顺序检查并相应地采取行动
- 由 setter 定义的属性:将属性值设置为 null
- 行为的属性:将属性值设置为 null
不要直接调用此方法,因为它是一个 PHP 魔术方法,在执行 unset($component->property)
时会被隐式调用。
public void __unset ( $name ) | ||
$name | string |
属性名 |
抛出异常 | yii\base\InvalidCallException |
如果属性是只读的。 |
---|
public function __unset($name)
{
$setter = 'set' . $name;
if (method_exists($this, $setter)) {
$this->$setter(null);
return;
}
// behavior property
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name)) {
$behavior->$name = null;
return;
}
}
throw new InvalidCallException('Unsetting an unknown or read-only property: ' . get_class($this) . '::' . $name);
}
向输入选项添加 aria 属性。
protected void addAriaAttributes ( &$options ) | ||
$options |
数组输入选项 |
protected function addAriaAttributes(&$options)
{
// Get proper attribute name when attribute name is tabular.
$attributeName = Html::getAttributeName($this->attribute);
if ($this->addAriaAttributes) {
if (!isset($options['aria-required']) && $this->model->isAttributeRequired($attributeName)) {
$options['aria-required'] = 'true';
}
if (!isset($options['aria-invalid']) && $this->model->hasErrors($attributeName)) {
$options['aria-invalid'] = 'true';
}
}
}
根据需要向输入选项添加验证类。
protected void addErrorClassIfNeeded ( &$options ) | ||
$options |
数组输入选项 |
protected function addErrorClassIfNeeded(&$options)
{
// Get proper attribute name when attribute name is tabular.
$attributeName = Html::getAttributeName($this->attribute);
if ($this->model->hasErrors($attributeName)) {
Html::addCssClass($options, $this->form->errorCssClass);
}
}
向输入选项添加角色属性
protected void addRoleAttributes ( &$options, $role ) | ||
$options |
数组输入选项 |
|
$role | string |
protected function addRoleAttributes(&$options, $role)
{
if (!isset($options['role'])) {
$options['role'] = $role;
}
}
根据输入选项调整标签的 for
属性。
protected void adjustLabelFor ( $options ) | ||
$options | array |
输入选项。 |
protected function adjustLabelFor($options)
{
if (!isset($options['id'])) {
return;
}
$this->_inputId = $options['id'];
if (!isset($this->labelOptions['for'])) {
$this->labelOptions['for'] = $options['id'];
}
}
定义于: yii\base\Component::attachBehavior()
将行为附加到此组件。
此方法将根据给定的配置创建行为对象。之后,行为对象将通过调用 yii\base\Behavior::attach() 方法附加到此组件。
另请参阅 detachBehavior()。
public yii\base\Behavior attachBehavior ( $name, $behavior ) | ||
$name | string |
行为的名称。 |
$behavior | string|array|yii\base\Behavior |
行为配置。可以是以下之一
|
返回值 | yii\base\Behavior |
行为对象 |
---|
public function attachBehavior($name, $behavior)
{
$this->ensureBehaviors();
return $this->attachBehaviorInternal($name, $behavior);
}
定义于: yii\base\Component::attachBehaviors()
将行为列表附加到组件。
每个行为都由其名称索引,并且应该是一个 yii\base\Behavior 对象,一个指定行为类的字符串,或一个用于创建行为的配置数组。
另请参阅 attachBehavior()。
public void attachBehaviors ( $behaviors ) | ||
$behaviors | array |
要附加到组件的行为列表 |
public function attachBehaviors($behaviors)
{
$this->ensureBehaviors();
foreach ($behaviors as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
呈现字段容器的开始标签。
public string begin ( ) | ||
返回值 | string |
渲染结果。 |
---|
public function begin()
{
if ($this->form->enableClientScript) {
$clientOptions = $this->getClientOptions();
if (!empty($clientOptions)) {
$this->form->attributes[] = $clientOptions;
}
}
$inputID = $this->getInputId();
$attribute = Html::getAttributeName($this->attribute);
$options = $this->options;
$class = isset($options['class']) ? (array) $options['class'] : [];
$class[] = "field-$inputID";
if ($this->model->isAttributeRequired($attribute)) {
$class[] = $this->form->requiredCssClass;
}
$options['class'] = implode(' ', $class);
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_CONTAINER) {
$this->addErrorClassIfNeeded($options);
}
$tag = ArrayHelper::remove($options, 'tag', 'div');
return Html::beginTag($tag, $options);
}
定义于: yii\base\Component::behaviors()
返回此组件应表现为的行为列表。
子类可以重写此方法以指定它们想要表现为的行为。
此方法的返回值应为一个行为对象或配置数组,并以行为名称作为索引。行为配置可以是指定行为类的字符串,也可以是以下结构的数组
'behaviorName' => [
'class' => 'BehaviorClass',
'property1' => 'value1',
'property2' => 'value2',
]
请注意,行为类必须扩展自 yii\base\Behavior。可以使用名称或匿名方式附加行为。当使用数组键作为名称时,可以使用此名称,稍后可以使用 getBehavior() 检索行为,或使用 detachBehavior() 分离行为。匿名行为无法检索或分离。
在此方法中声明的行为将自动(按需)附加到组件。
public array behaviors ( ) | ||
返回值 | array |
行为配置。 |
---|
public function behaviors()
{
return [];
}
定义于: yii\base\Component::canGetProperty()
返回一个值,指示是否可以读取属性。
如果满足以下条件,则可以读取属性
- 类具有与指定名称关联的 getter 方法(在这种情况下,属性名称不区分大小写);
- 类具有与指定名称相同的成员变量(当
$checkVars
为 true 时); - 附加的行为具有给定名称的可读属性(当
$checkBehaviors
为 true 时)。
另请参阅 canSetProperty()。
public boolean canGetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
属性名 |
$checkVars | boolean |
是否将成员变量视为属性 |
$checkBehaviors | boolean |
是否将行为的属性视为此组件的属性 |
返回值 | boolean |
属性是否可读 |
---|
public function canGetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'get' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canGetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
定义于: yii\base\Component::canSetProperty()
返回一个值,指示是否可以设置属性。
如果满足以下条件,则可以写入属性
- 类具有与指定名称关联的 setter 方法(在这种情况下,属性名称不区分大小写);
- 类具有与指定名称相同的成员变量(当
$checkVars
为 true 时); - 附加的行为具有给定名称的可写属性(当
$checkBehaviors
为 true 时)。
另请参阅 canGetProperty()。
public boolean canSetProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
属性名 |
$checkVars | boolean |
是否将成员变量视为属性 |
$checkBehaviors | boolean |
是否将行为的属性视为此组件的属性 |
返回值 | boolean |
属性是否可写 |
---|
public function canSetProperty($name, $checkVars = true, $checkBehaviors = true)
{
if (method_exists($this, 'set' . $name) || $checkVars && property_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->canSetProperty($name, $checkVars)) {
return true;
}
}
}
return false;
}
呈现复选框。
此方法将根据模型属性值生成 checked
标签属性。
public $this checkbox ( $options = [], $enclosedByLabel = true ) | ||
$options | array |
标签选项,以名称-值对的形式表示。以下选项将被特殊处理
其余选项将作为结果标签的属性呈现。值将使用 yii\helpers\Html::encode() 进行 HTML 编码。如果值为 如果为输入元素设置了自定义 |
$enclosedByLabel | boolean |
是否将复选框包含在标签内。如果为 |
返回值 | $this |
字段对象本身。 |
---|
public function checkbox($options = [], $enclosedByLabel = true)
{
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
if ($enclosedByLabel) {
$this->parts['{input}'] = Html::activeCheckbox($this->model, $this->attribute, $options);
$this->parts['{label}'] = '';
} else {
if (isset($options['label']) && !isset($this->parts['{label}'])) {
$this->parts['{label}'] = $options['label'];
if (!empty($options['labelOptions'])) {
$this->labelOptions = $options['labelOptions'];
}
}
unset($options['labelOptions']);
$options['label'] = null;
$this->parts['{input}'] = Html::activeCheckbox($this->model, $this->attribute, $options);
}
return $this;
}
呈现复选框列表。
复选框列表允许进行多选,类似于 listBox()。因此,相应的提交值是一个数组。复选框列表的选择取自模型属性的值。
public $this checkboxList ( $items, $options = [] ) | ||
$items | array |
用于生成复选框的数据项。数组值是标签,而数组键是相应的复选框值。 |
$options | array |
复选框列表的选项(名称=>配置)。有关可用选项的列表,请参阅 yii\helpers\Html::activeCheckboxList() 的 |
返回值 | $this |
字段对象本身。 |
---|
public function checkboxList($items, $options = [])
{
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->_skipLabelFor = true;
$this->parts['{input}'] = Html::activeCheckboxList($this->model, $this->attribute, $items, $options);
return $this;
}
::class
。
定义于: yii\base\BaseObject::className()
返回此类的完全限定名称。
public static string className ( ) | ||
返回值 | string |
此类的完全限定名称。 |
---|
public static function className()
{
return get_called_class();
}
public yii\base\Behavior|null detachBehavior ( $name ) | ||
$name | string |
行为的名称。 |
返回值 | yii\base\Behavior|null |
分离的行为。如果行为不存在,则为 Null。 |
---|
public function detachBehavior($name)
{
$this->ensureBehaviors();
if (isset($this->_behaviors[$name])) {
$behavior = $this->_behaviors[$name];
unset($this->_behaviors[$name]);
$behavior->detach();
return $behavior;
}
return null;
}
定义于: yii\base\Component::detachBehaviors()
从组件分离所有行为。
public void detachBehaviors ( ) |
public function detachBehaviors()
{
$this->ensureBehaviors();
foreach ($this->_behaviors as $name => $behavior) {
$this->detachBehavior($name);
}
}
呈现下拉列表。
下拉列表的选择取自模型属性的值。
public $this dropDownList ( $items, $options = [] ) | ||
$items | array |
选项数据项。数组键是选项值,数组值是对应的选项标签。数组也可以嵌套(即一些数组值也是数组)。对于每个子数组,将生成一个选项组,其标签与子数组关联的键。如果您有一系列数据模型,您可以使用yii\helpers\ArrayHelper::map()将其转换为上述格式。 注意,此方法会自动对值和标签进行 HTML 编码,标签中的空格也会进行 HTML 编码。 |
$options | array |
标签选项,以名称-值对的形式表示。 有关可用选项的列表,请参阅yii\helpers\Html::activeDropDownList()的 如果为输入元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function dropDownList($items, $options = [])
{
$options = array_merge($this->inputOptions, $options);
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->parts['{input}'] = Html::activeDropDownList($this->model, $this->attribute, $items, $options);
return $this;
}
呈现字段容器的结束标签。
public string end ( ) | ||
返回值 | string |
渲染结果。 |
---|
public function end()
{
return Html::endTag(ArrayHelper::keyExists('tag', $this->options) ? $this->options['tag'] : 'div');
}
定义于: yii\base\Component::ensureBehaviors()
确保在 behaviors() 中声明的行为已附加到此组件。
public void ensureBehaviors ( ) |
public function ensureBehaviors()
{
if ($this->_behaviors === null) {
$this->_behaviors = [];
foreach ($this->behaviors() as $name => $behavior) {
$this->attachBehaviorInternal($name, $behavior);
}
}
}
public $this error ( $options = [] ) | ||
$options | array|false |
标签选项,以名称-值对的形式表示。它将与$errorOptions合并。这些选项将呈现为结果标签的属性。使用yii\helpers\Html::encode()对值进行 HTML 编码。如果此参数为 以下选项将被特殊处理
如果为错误元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function error($options = [])
{
if ($options === false) {
$this->parts['{error}'] = '';
return $this;
}
$options = array_merge($this->errorOptions, $options);
$this->parts['{error}'] = Html::error($this->model, $this->attribute, $options);
return $this;
}
呈现文件输入。
此方法将为模型属性自动生成name
和value
标签属性,除非它们在$options
中明确指定。
public $this fileInput ( $options = [] ) | ||
$options | array |
标签选项,以名称-值对的形式表示。这些将呈现为结果标签的属性。使用yii\helpers\Html::encode()对值进行 HTML 编码。 如果为输入元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function fileInput($options = [])
{
// https://github.com/yiisoft/yii2/pull/795
if ($this->inputOptions !== ['class' => 'form-control']) {
$options = array_merge($this->inputOptions, $options);
}
// https://github.com/yiisoft/yii2/issues/8779
if (!isset($this->form->options['enctype'])) {
$this->form->options['enctype'] = 'multipart/form-data';
}
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->parts['{input}'] = Html::activeFileInput($this->model, $this->attribute, $options);
return $this;
}
定义于: yii\base\Component::getBehavior()
返回命名的行为对象。
public yii\base\Behavior|null getBehavior ( $name ) | ||
$name | string |
行为名称 |
返回值 | yii\base\Behavior|null |
行为对象,如果行为不存在则为 null |
---|
public function getBehavior($name)
{
$this->ensureBehaviors();
return isset($this->_behaviors[$name]) ? $this->_behaviors[$name] : null;
}
定义于: yii\base\Component::getBehaviors()
返回附加到此组件的所有行为。
public yii\base\Behavior[] getBehaviors ( ) | ||
返回值 | yii\base\Behavior[] |
附加到此组件的行为列表 |
---|
public function getBehaviors()
{
$this->ensureBehaviors();
return $this->_behaviors;
}
返回字段的 JS 选项。
protected array getClientOptions ( ) | ||
返回值 | array |
JS 选项。 |
---|
protected function getClientOptions()
{
$attribute = Html::getAttributeName($this->attribute);
if (!in_array($attribute, $this->model->activeAttributes(), true)) {
return [];
}
$clientValidation = $this->isClientValidationEnabled();
$ajaxValidation = $this->isAjaxValidationEnabled();
if ($clientValidation) {
$validators = [];
foreach ($this->model->getActiveValidators($attribute) as $validator) {
/* @var $validator \yii\validators\Validator */
$js = $validator->clientValidateAttribute($this->model, $attribute, $this->form->getView());
if ($validator->enableClientValidation && $js != '') {
if ($validator->whenClient !== null) {
$js = "if (({$validator->whenClient})(attribute, value)) { $js }";
}
$validators[] = $js;
}
}
}
if (!$ajaxValidation && (!$clientValidation || empty($validators))) {
return [];
}
$options = [];
$inputID = $this->getInputId();
$options['id'] = $inputID ?: Html::getInputId($this->model, $this->attribute);
$options['name'] = $this->attribute;
$options['container'] = isset($this->selectors['container']) ? $this->selectors['container'] : ".field-$inputID";
$options['input'] = isset($this->selectors['input']) ? $this->selectors['input'] : "#$inputID";
if (isset($this->selectors['error'])) {
$options['error'] = $this->selectors['error'];
} elseif (isset($this->errorOptions['class'])) {
$options['error'] = '.' . implode('.', preg_split('/\s+/', $this->errorOptions['class'], -1, PREG_SPLIT_NO_EMPTY));
} else {
$options['error'] = isset($this->errorOptions['tag']) ? $this->errorOptions['tag'] : 'span';
}
$options['encodeError'] = !isset($this->errorOptions['encode']) || $this->errorOptions['encode'];
if ($ajaxValidation) {
$options['enableAjaxValidation'] = true;
}
foreach (['validateOnChange', 'validateOnBlur', 'validateOnType', 'validationDelay'] as $name) {
$options[$name] = $this->$name === null ? $this->form->$name : $this->$name;
}
if (!empty($validators)) {
$options['validate'] = new JsExpression('function (attribute, value, messages, deferred, $form) {' . implode('', $validators) . '}');
}
if ($this->addAriaAttributes === false) {
$options['updateAriaInvalid'] = false;
}
// only get the options that are different from the default ones (set in yii.activeForm.js)
return array_diff_assoc($options, [
'validateOnChange' => true,
'validateOnBlur' => true,
'validateOnType' => false,
'validationDelay' => 500,
'encodeError' => true,
'error' => '.help-block',
'updateAriaInvalid' => true,
]);
}
返回此表单字段的输入元素的 HTML id
。
protected string getInputId ( ) | ||
返回值 | string |
输入 ID。 |
---|
protected function getInputId()
{
return $this->_inputId ?: Html::getInputId($this->model, $this->attribute);
}
定义于: yii\base\Component::hasEventHandlers()
返回一个值,指示是否有任何处理程序附加到命名的事件。
public boolean hasEventHandlers ( $name ) | ||
$name | string |
事件名称 |
返回值 | boolean |
事件是否附加了任何处理程序。 |
---|
public function hasEventHandlers($name)
{
$this->ensureBehaviors();
if (!empty($this->_events[$name])) {
return true;
}
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (!empty($handlers) && StringHelper::matchWildcard($wildcard, $name)) {
return true;
}
}
return Event::hasHandlers($this, $name);
}
定义于: yii\base\Component::hasMethod()
返回一个值,指示方法是否已定义。
如果以下情况则定义了方法
- 类具有指定名称的方法
- 附加的行为具有给定名称的方法(当
$checkBehaviors
为 true 时)。
public boolean hasMethod ( $name, $checkBehaviors = true ) | ||
$name | string |
属性名 |
$checkBehaviors | boolean |
是否将行为的方法视为此组件的方法 |
返回值 | boolean |
方法是否已定义 |
---|
public function hasMethod($name, $checkBehaviors = true)
{
if (method_exists($this, $name)) {
return true;
} elseif ($checkBehaviors) {
$this->ensureBehaviors();
foreach ($this->_behaviors as $behavior) {
if ($behavior->hasMethod($name)) {
return true;
}
}
}
return false;
}
定义于: yii\base\Component::hasProperty()
返回一个值,指示是否为此组件定义了属性。
如果以下情况则定义了属性
- 类具有与指定名称关联的 getter 或 setter 方法(在这种情况下,属性名称不区分大小写);
- 类具有与指定名称相同的成员变量(当
$checkVars
为 true 时); - 附加的行为具有给定名称的属性(当
$checkBehaviors
为 true 时)。
另请参见
public boolean hasProperty ( $name, $checkVars = true, $checkBehaviors = true ) | ||
$name | string |
属性名 |
$checkVars | boolean |
是否将成员变量视为属性 |
$checkBehaviors | boolean |
是否将行为的属性视为此组件的属性 |
返回值 | boolean |
属性是否已定义 |
---|
public function hasProperty($name, $checkVars = true, $checkBehaviors = true)
{
return $this->canGetProperty($name, $checkVars, $checkBehaviors) || $this->canSetProperty($name, false, $checkBehaviors);
}
呈现提示标签。
public $this hint ( $content, $options = [] ) | ||
$content | 字符串|布尔值|空值 |
提示内容。如果为 |
$options | array |
标签选项,以名称-值对的形式给出。这些将呈现为提示标签的属性。值将使用 yii\helpers\Html::encode() 进行 HTML 编码。 以下选项将被特殊处理
|
返回值 | $this |
字段对象本身。 |
---|
public function hint($content, $options = [])
{
if ($content === false) {
$this->parts['{hint}'] = '';
return $this;
}
$options = array_merge($this->hintOptions, $options);
if ($content !== null) {
$options['hint'] = $content;
}
$this->parts['{hint}'] = Html::activeHint($this->model, $this->attribute, $options);
return $this;
}
public void init ( ) |
public function init()
{
}
呈现输入标签。
public $this input ( $type, $options = [] ) | ||
$type | string |
输入类型(例如 |
$options | array |
标签选项,以名称-值对的形式表示。这些将呈现为结果标签的属性。使用yii\helpers\Html::encode()对值进行 HTML 编码。 如果为输入元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function input($type, $options = [])
{
$options = array_merge($this->inputOptions, $options);
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->parts['{input}'] = Html::activeInput($type, $this->model, $this->attribute, $options);
return $this;
}
检查字段是否启用了 ajax 验证。
protected 布尔值 isAjaxValidationEnabled ( ) |
protected function isAjaxValidationEnabled()
{
return $this->enableAjaxValidation || $this->enableAjaxValidation === null && $this->form->enableAjaxValidation;
}
检查字段是否启用了客户端验证。
protected 布尔值 isClientValidationEnabled ( ) |
protected function isClientValidationEnabled()
{
return $this->enableClientValidation || $this->enableClientValidation === null && $this->form->enableClientValidation;
}
为 $attribute 生成标签标签。
public $this label ( $label = null, $options = [] ) | ||
$label | 字符串|空值|false |
要使用的标签。如果为 |
$options | 数组|空值 |
标签选项,以名称-值对的形式给出。它将与 $labelOptions 合并。选项将呈现为结果标签的属性。值将使用 yii\helpers\Html::encode() 进行 HTML 编码。如果值为 |
返回值 | $this |
字段对象本身。 |
---|
public function label($label = null, $options = [])
{
if ($label === false) {
$this->parts['{label}'] = '';
return $this;
}
$options = array_merge($this->labelOptions, $options);
if ($label !== null) {
$options['label'] = $label;
}
if ($this->_skipLabelFor) {
$options['for'] = null;
}
$this->parts['{label}'] = Html::activeLabel($this->model, $this->attribute, $options);
return $this;
}
呈现列表框。
列表框的选择取自模型属性的值。
public $this listBox ( $items, $options = [] ) | ||
$items | array |
选项数据项。数组键是选项值,数组值是对应的选项标签。数组也可以嵌套(即一些数组值也是数组)。对于每个子数组,将生成一个选项组,其标签与子数组关联的键。如果您有一系列数据模型,您可以使用yii\helpers\ArrayHelper::map()将其转换为上述格式。 注意,此方法会自动对值和标签进行 HTML 编码,标签中的空格也会进行 HTML 编码。 |
$options | array |
标签选项,以名称-值对的形式表示。 有关可用选项的列表,请参阅 yii\helpers\Html::activeListBox() 的 如果为输入元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function listBox($items, $options = [])
{
$options = array_merge($this->inputOptions, $options);
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->parts['{input}'] = Html::activeListBox($this->model, $this->attribute, $items, $options);
return $this;
}
定义于: yii\base\Component::off()
从此组件分离现有的事件处理程序。
此方法与 on() 相反。
注意:如果为事件名称传递通配符模式,则只会删除使用此通配符注册的处理程序,而使用与此通配符匹配的普通名称注册的处理程序将保留。
另请参阅 on()。
public 布尔值 off ( $name, $handler = null ) | ||
$name | string |
事件名称 |
$handler | 可调用|空值 |
要移除的事件处理程序。如果为 null,则将移除附加到命名事件的所有处理程序。 |
返回值 | boolean |
如果找到并分离了一个处理程序 |
---|
public function off($name, $handler = null)
{
$this->ensureBehaviors();
if (empty($this->_events[$name]) && empty($this->_eventWildcards[$name])) {
return false;
}
if ($handler === null) {
unset($this->_events[$name], $this->_eventWildcards[$name]);
return true;
}
$removed = false;
// plain event names
if (isset($this->_events[$name])) {
foreach ($this->_events[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_events[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_events[$name] = array_values($this->_events[$name]);
return true;
}
}
// wildcard event names
if (isset($this->_eventWildcards[$name])) {
foreach ($this->_eventWildcards[$name] as $i => $event) {
if ($event[0] === $handler) {
unset($this->_eventWildcards[$name][$i]);
$removed = true;
}
}
if ($removed) {
$this->_eventWildcards[$name] = array_values($this->_eventWildcards[$name]);
// remove empty wildcards to save future redundant regex checks:
if (empty($this->_eventWildcards[$name])) {
unset($this->_eventWildcards[$name]);
}
}
}
return $removed;
}
将事件处理程序附加到事件。
事件处理程序必须是有效的 PHP 回调。以下是一些示例
function ($event) { ... } // anonymous function
[$object, 'handleClick'] // $object->handleClick()
['Page', 'handleClick'] // Page::handleClick()
'handleClick' // global function handleClick()
事件处理程序必须使用以下签名定义,
function ($event)
其中 $event
是一个 yii\base\Event 对象,其中包含与事件关联的参数。
从 2.0.14 开始,您可以将事件名称指定为通配符模式
$component->on('event.group.*', function ($event) {
Yii::trace($event->name . ' is triggered.');
});
另请参阅 off()。
public void on ( $name, $handler, $data = null, $append = true ) | ||
$name | string |
事件名称 |
$handler | 可调用 |
事件处理程序 |
$data | 混合类型 |
触发事件时要传递给事件处理程序的数据。调用事件处理程序时,可以通过 yii\base\Event::$data 访问此数据。 |
$append | boolean |
是否将新的事件处理程序附加到现有处理程序列表的末尾。如果为 false,则新的处理程序将插入到现有处理程序列表的开头。 |
public function on($name, $handler, $data = null, $append = true)
{
$this->ensureBehaviors();
if (strpos($name, '*') !== false) {
if ($append || empty($this->_eventWildcards[$name])) {
$this->_eventWildcards[$name][] = [$handler, $data];
} else {
array_unshift($this->_eventWildcards[$name], [$handler, $data]);
}
return;
}
if ($append || empty($this->_events[$name])) {
$this->_events[$name][] = [$handler, $data];
} else {
array_unshift($this->_events[$name], [$handler, $data]);
}
}
呈现密码输入。
此方法将为模型属性自动生成name
和value
标签属性,除非它们在$options
中明确指定。
public $this passwordInput ( $options = [] ) | ||
$options | array |
标签选项,以名称-值对的形式表示。这些将呈现为结果标签的属性。使用yii\helpers\Html::encode()对值进行 HTML 编码。 如果为输入元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function passwordInput($options = [])
{
$options = array_merge($this->inputOptions, $options);
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->parts['{input}'] = Html::activePasswordInput($this->model, $this->attribute, $options);
return $this;
}
呈现单选按钮。
此方法将根据模型属性值生成 checked
标签属性。
public $this radio ( $options = [], $enclosedByLabel = true ) | ||
$options | array |
标签选项,以名称-值对的形式表示。以下选项将被特殊处理
其余选项将作为结果标签的属性呈现。值将使用 yii\helpers\Html::encode() 进行 HTML 编码。如果值为 如果为输入元素设置了自定义 |
$enclosedByLabel | boolean |
是否将单选按钮包含在标签内。如果为 |
返回值 | $this |
字段对象本身。 |
---|
public function radio($options = [], $enclosedByLabel = true)
{
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
if ($enclosedByLabel) {
$this->parts['{input}'] = Html::activeRadio($this->model, $this->attribute, $options);
$this->parts['{label}'] = '';
} else {
if (isset($options['label']) && !isset($this->parts['{label}'])) {
$this->parts['{label}'] = $options['label'];
if (!empty($options['labelOptions'])) {
$this->labelOptions = $options['labelOptions'];
}
}
unset($options['labelOptions']);
$options['label'] = null;
$this->parts['{input}'] = Html::activeRadio($this->model, $this->attribute, $options);
}
return $this;
}
呈现单选按钮列表。
单选按钮列表类似于复选框列表,但它只允许单选。单选按钮的选择取自模型属性的值。
public $this radioList ( $items, $options = [] ) | ||
$items | array |
用于生成单选按钮的数据项。数组值是标签,而数组键是相应的单选值。 |
$options | array |
单选按钮列表的选项(名称 => 配置)。有关可用选项的列表,请参阅 yii\helpers\Html::activeRadioList() 的 |
返回值 | $this |
字段对象本身。 |
---|
public function radioList($items, $options = [])
{
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addRoleAttributes($options, 'radiogroup');
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->_skipLabelFor = true;
$this->parts['{input}'] = Html::activeRadioList($this->model, $this->attribute, $items, $options);
return $this;
}
呈现整个字段。
此方法将生成标签、错误标签、输入标签和提示标签(如果有),并根据 $template 将它们组合成 HTML。
public string render ( $content = null ) | ||
$content | string|callable|null |
字段容器内的内容。如果为
|
返回值 | string |
渲染结果。 |
---|
public function render($content = null)
{
if ($content === null) {
if (!isset($this->parts['{input}'])) {
$this->textInput();
}
if (!isset($this->parts['{label}'])) {
$this->label();
}
if (!isset($this->parts['{error}'])) {
$this->error();
}
if (!isset($this->parts['{hint}'])) {
$this->hint(null);
}
$content = strtr($this->template, $this->parts);
} elseif (!is_string($content)) {
$content = call_user_func($content, $this);
}
return $this->begin() . "\n" . $content . "\n" . $this->end();
}
呈现文本输入。
此方法将为模型属性自动生成name
和value
标签属性,除非它们在$options
中明确指定。
public $this textInput ( $options = [] ) | ||
$options | array |
标签选项,以名称-值对的形式表示。这些将呈现为结果标签的属性。使用yii\helpers\Html::encode()对值进行 HTML 编码。 识别以下特殊选项
请注意,如果您为输入元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function textInput($options = [])
{
$options = array_merge($this->inputOptions, $options);
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->parts['{input}'] = Html::activeTextInput($this->model, $this->attribute, $options);
return $this;
}
呈现文本区域。
模型属性值将用作文本区域中的内容。
public $this textarea ( $options = [] ) | ||
$options | array |
标签选项,以名称-值对的形式表示。这些将呈现为结果标签的属性。使用yii\helpers\Html::encode()对值进行 HTML 编码。 如果您为文本区域元素设置了自定义 |
返回值 | $this |
字段对象本身。 |
---|
public function textarea($options = [])
{
$options = array_merge($this->inputOptions, $options);
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($options);
}
$this->addAriaAttributes($options);
$this->adjustLabelFor($options);
$this->parts['{input}'] = Html::activeTextarea($this->model, $this->attribute, $options);
return $this;
}
public void trigger ( $name, yii\base\Event $event = null ) | ||
$name | string |
事件名称 |
$event | yii\base\Event|null |
事件实例。如果未设置,将创建一个默认的 yii\base\Event 对象。 |
public function trigger($name, Event $event = null)
{
$this->ensureBehaviors();
$eventHandlers = [];
foreach ($this->_eventWildcards as $wildcard => $handlers) {
if (StringHelper::matchWildcard($wildcard, $name)) {
$eventHandlers[] = $handlers;
}
}
if (!empty($this->_events[$name])) {
$eventHandlers[] = $this->_events[$name];
}
if (!empty($eventHandlers)) {
$eventHandlers = call_user_func_array('array_merge', $eventHandlers);
if ($event === null) {
$event = new Event();
}
if ($event->sender === null) {
$event->sender = $this;
}
$event->handled = false;
$event->name = $name;
foreach ($eventHandlers as $handler) {
$event->data = $handler[1];
call_user_func($handler[0], $event);
// stop further handling if the event is handled
if ($event->handled) {
return;
}
}
}
// invoke class-level attached handlers
Event::trigger($this, $name, $event);
}
将小部件呈现为字段的输入。
请注意,小部件必须同时具有 model
和 attribute
属性。它们将分别使用此字段的 $model 和 $attribute 进行初始化。
如果您想使用不具有 model
和 attribute
属性的小部件,请改用 render()。
虽然扩展自 yii\base\Widget 的小部件可以与活动字段一起使用,但最好使用 yii\widgets\InputWidget 作为基类。
例如,要使用 yii\widgets\MaskedInput 小部件获取一些日期输入,您可以使用以下代码,假设 $form
是您的 yii\widgets\ActiveForm 实例
$form->field($model, 'date')->widget(\yii\widgets\MaskedInput::class, [
'mask' => '99/99/9999',
]);
如果为输入元素设置了自定义 id
,则可能需要相应地调整 $selectors。
public $this widget ( $class, $config = [] ) | ||
$class | string |
小部件类名。 |
$config | array |
将用于初始化小部件的名称-值对。 |
返回值 | $this |
字段对象本身。 |
---|---|---|
抛出异常 | 异常 |
public function widget($class, $config = [])
{
/* @var $class \yii\base\Widget */
$config['model'] = $this->model;
$config['attribute'] = $this->attribute;
$config['view'] = $this->form->getView();
if (is_subclass_of($class, 'yii\widgets\InputWidget')) {
foreach ($this->inputOptions as $key => $value) {
if (!isset($config['options'][$key])) {
$config['options'][$key] = $value;
}
}
$config['field'] = $this;
if (!isset($config['options'])) {
$config['options'] = [];
}
if ($this->form->validationStateOn === ActiveForm::VALIDATION_STATE_ON_INPUT) {
$this->addErrorClassIfNeeded($config['options']);
}
$this->addAriaAttributes($config['options']);
$this->adjustLabelFor($config['options']);
}
$this->parts['{input}'] = $class::widget($config);
return $this;
}
注册 或 登录 以发表评论。