yii2 自定义字段类型

yii2 custom field type

我正在使用 Yii2,我想创建自定义活动表单字段类型。

例如,创建一个文本输入表单域是这样发生的:

$form = ActiveForm::begin();
$form->field($model, 'attribute_name')->textInput(['maxlength' => true]) 

我想制作自定义 json 输入字段类型和特殊渲染,并像这样使用它:

$form->field($model, 'attribute_name')->JsonInput(['maxlength' => true]);

而不是这样:

$form->field($model, 'attribute_name')->widget('trntv\aceeditor\Widget','mode'=>'json);

如何扩展 yii\widgets\ActiveForm 以便添加自定义表单字段类型?有可能吗?

我发现的唯一相关信息是在 Yii forum 中,但使用格式不同:

$form->myCheckbox($model, 'attribute_name');

并且我希望用法类似于 yii 表单类型:

$form->field($model, 'attribute_name')->JsonInput(['maxlength' => true]);

您需要创建:

  1. 使用方法 JsonInput() 自定义 ActiveField class(使用您的小部件配置调用 widget())。
  2. 自定义 ActiveForm class 已将 fieldClass 属性 更改为您的自定义 ActiveField class。您可以将 @method \my\custom\ActiveField field(\yii\base\Model $model, string $attribute, array $options = []) 添加到 ActiveForm 的 PHPDoc 以获得更好的代码完成。

您也可以跳过创建自己的 ActiveForm 并临时更改 fieldClass

$form = ActiveForm::begin([
    'fieldClass' => \my\custom\ActiveField::class,
])

但是您每次都需要重复它,并且您不会在 ActiveField.

中获得自定义方法的代码完成