yii2自定义字段类型

时间:2018-04-03 13:11:54

标签: forms yii2 extending-classes custom-field-type

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

例如,creatig文本输入表单字段就像这样:

static_assert(is_same_v<decltype(char_) , TCharType>,"dont play");

我想使用特殊渲染制作自定义json输入字段类型,并使用它,如下所示:

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

而不是这样:

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

如何扩展$form->field($model, 'attribute_name')->widget('trntv\aceeditor\Widget','mode'=>'json); 以便我可以添加自定义表单字段类型?有可能吗?

关于我发现的唯一可关联信息是Yii forum,但使用格式不同:

yii\widgets\ActiveForm

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

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

1 个答案:

答案 0 :(得分:0)

您需要创建:

  1. 自定义ActiveField类,其方法为JsonInput()(使用您的小部件配置调用widget())。
  2. 将自定义ActiveForm类更改为fieldClass属性到您的自定义ActiveField类。您可以将@method \my\custom\ActiveField field(\yii\base\Model $model, string $attribute, array $options = [])添加到ActiveForm的PHPDoc中,以便更好地完成代码。
  3. 您也可以跳过创建自己的ActiveForm并更改fieldClass ad hoc:

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

    但您需要每次都重复此操作,并且您无法在ActiveField中获得自定义方法的代码完成。