Yii2 加载和保存 ActiveForm

Yii2 Loading and saving ActiveForm

型号:

class Team extends ActiveRecord {
    public function rules() {
        return [
            [['code', 'name'], 'required'],
        ];
    }
}

控制器:

class TeamController extends ActiveController {
    public $modelClass = 'frontend\models\Team';
    protected function verbs(){
        return [
            'create' => ['POST'],
        ];
    }
}

查看:

<?php Pjax::begin(['id' => 'new_team']) ?>
<?php $form = ActiveForm::begin(['action' => 'team/create'], 'options' => ['data-pjax' => true ]]); ?>
    <?= $form->field($model, 'code')->textInput() ?>
    <?= $form->field($model, 'name')->textInput() ?>
    <div class="form-group">
        <?= Html::submitButton(Yii::t('app', 'Create'), ['class' => 'btn btn-success']) ?>
    </div>
<?php ActiveForm::end(); ?>
<?php Pjax::end(); ?>

表单的字段将以 Team[code] 和 Team[name] 作为名称属性值。我希望它们是 name="code" 和 name="name" 。在我提交表格的那一刻,我得到:

[{"field":"code",
  "message":"Code cannot be blank."},
 {"field":"name",
  "message":"Name cannot be blank."}]

如何更改名称属性的值?

name 属性 Team[code] 的当前格式是因为 YiiActiveForm 使用模型信息生成格式为 ModelName[FieldName] 的输入名称,这有助于减少在保存之前手动将 post 字段分配给模型字段,如果您不希望表单字段名称遵循 ActiveForm 格式,您需要使用 yii\helpers\Html 帮助程序来创建表单和字段,但要小心,因为您现在需要手动将字段映射到 hte 模型,所以您要做的就是将表单声明从

更改为
<?php $form = ActiveForm::begin(['action' => 'team/create'], 'options' => ['data-pjax' => true ]]); ?>
    <?= $form->field($model, 'code')->textInput() ?>
    <?= $form->field($model, 'name')->textInput() ?>
    <div class="form-group">
        <?= Html::submitButton(Yii::t('app', 'Create'), ['class' => 'btn btn-success']) ?>
    </div>
<?php ActiveForm::end(); ?>

<?= yii\helpers\Html::beginForm(['team/create', 'id' => 'team-form'], 'post', ['data-pjax' => true]) ?>
     <?= yii\helpers\Html::activeInput('text',$model, 'code')?>
     <?= yii\helpers\Html::activeInput('text',$model, 'name')?>
    <div class="form-group">
        <?= Html::submitButton(Yii::t('app', 'Create'), ['class' => 'btn btn-success']) ?>
    </div>
<?= Html::endForm() ?>

编辑

根据讨论,OP 必须恢复到 ActiveForm 并试图保存记录但遇到问题所以我想我可以在答案中添加此信息也许它会帮助某人。

为了在您向任何 controller/action 提交表单时使用 ActiveForm,您需要查看是否正确加载 modelpost使用

的数组
$model->load(Yii::$app->request->post()) 

然后调用 $model->save()$model->validate(),除了在调用 $model->load() 之后立即尝试 print_r($model->attributes) 以检查值是否正确加载到 model.