Yii2 - 自动生成占位符属性
Yii2 - automatically generate placeholder attribute
我正在尝试使用 Yii2 创建一个 'auto-placeholder' 元素,但由于找不到我的问题的实际答案,我想我会在这里尝试一下。
比如我有这个字段:
<?= $form->field($model, 'username',
[
'template'=>'{input}{label}{error}'
])
->textInput(['placeHolder'=>'{name}')
->label(false);
?>
然而,这种情况显然会在占位符属性中呈现 "name"。
但我想根据我正在使用的 model
变量自动生成占位符属性,使其呈现以下内容:
<input type="text" id="loginform-username" class="form-control" name="LoginForm[username]" placeholder="Username">
是否有已知的方法来访问和插入 form->field
的属性并将其显示在自己的元素中?
是的,我们可以像下面这样在模型文件中定义属性标签。
public function attributeLabels() {
return [
'username' => 'Username',
];
}
然后您可以根据以下字段自动获取标签。
<?= $form->field($model, 'username',
[
'template'=>'{input}{label}{error}'
])
->textInput(['placeholder' => $model->getAttributeLabel('username'))
->label(false);
?>
我希望这能解决您的问题。
如果您遇到一些额外的麻烦,您可以为此扩展 ActiveField class。
class MyActiveField extends \yii\widgets\ActiveField
{
public function textInput($options = [])
{
if (empty($options['placeholder'])) {
$options['placeholder'] = $this->model->getAttributeLabel($this->attribute);
}
return parent::textInput($options);
}
}
现在只需要使用您的 class 而不是默认的。
您每次都可以在视图中执行:
<?php $form = ActiveForm::begin([
'fieldClass' => 'fully\qualified\name\of\MyActiveField'
]); ?>
或扩展 ActiveForm:
class MyActiveForm extends \yii\widgets\ActiveForm
{
$fieldClass = 'fully\qualified\name\of\MyActiveField';
}
并使用它代替默认的 ActiveForm 小部件:
<?php $form = MyActiveForm::begin(); ?>
现在您可以使用 <?= $form->field($model, 'attribute')->textInput() ?>
(或者只是 <?= $form->field($model, 'attribute') ?>
,因为 textInput
是默认值)并且应该有占位符。
我正在尝试使用 Yii2 创建一个 'auto-placeholder' 元素,但由于找不到我的问题的实际答案,我想我会在这里尝试一下。
比如我有这个字段:
<?= $form->field($model, 'username',
[
'template'=>'{input}{label}{error}'
])
->textInput(['placeHolder'=>'{name}')
->label(false);
?>
然而,这种情况显然会在占位符属性中呈现 "name"。
但我想根据我正在使用的 model
变量自动生成占位符属性,使其呈现以下内容:
<input type="text" id="loginform-username" class="form-control" name="LoginForm[username]" placeholder="Username">
是否有已知的方法来访问和插入 form->field
的属性并将其显示在自己的元素中?
是的,我们可以像下面这样在模型文件中定义属性标签。
public function attributeLabels() {
return [
'username' => 'Username',
];
}
然后您可以根据以下字段自动获取标签。
<?= $form->field($model, 'username',
[
'template'=>'{input}{label}{error}'
])
->textInput(['placeholder' => $model->getAttributeLabel('username'))
->label(false);
?>
我希望这能解决您的问题。
如果您遇到一些额外的麻烦,您可以为此扩展 ActiveField class。
class MyActiveField extends \yii\widgets\ActiveField
{
public function textInput($options = [])
{
if (empty($options['placeholder'])) {
$options['placeholder'] = $this->model->getAttributeLabel($this->attribute);
}
return parent::textInput($options);
}
}
现在只需要使用您的 class 而不是默认的。 您每次都可以在视图中执行:
<?php $form = ActiveForm::begin([
'fieldClass' => 'fully\qualified\name\of\MyActiveField'
]); ?>
或扩展 ActiveForm:
class MyActiveForm extends \yii\widgets\ActiveForm
{
$fieldClass = 'fully\qualified\name\of\MyActiveField';
}
并使用它代替默认的 ActiveForm 小部件:
<?php $form = MyActiveForm::begin(); ?>
现在您可以使用 <?= $form->field($model, 'attribute')->textInput() ?>
(或者只是 <?= $form->field($model, 'attribute') ?>
,因为 textInput
是默认值)并且应该有占位符。