Yii2 在创建和更新场景中使用不同的表单字段

标签 yii2 yii2-model

在我的模型中,我创建了不同的场景。我有一种通过创建和更新方法呈现的表单。表单字段如下

Form.php

 <?php $form = ActiveForm::begin(); ?>

 <?= $form->errorSummary($model, $options = ['header'=>'', 'class'=>'pull-left errorDiv']); ?>

            <?= $form->field($model, 'user_fname')->textInput(['class'=>'form-control']);?>
            <?= $form->field($model, 'user_lname')->textInput(['class'=>'form-control']); ?>
            <?= $form->field($model,'user_email')->textInput(['class'=>'form-control']); ?>
            <?= $form->field($model, 'user_password_hash')->passwordInput([]); ?>
            <?= $form->field($model, 'user_password_hash_repeat')->passwordInput(['class'=>'form-control']); ?>
            <?php  $items = ArrayHelper::map(SimAuthAssignment::find()->all(),'item_name' ,'item_name');?>
            <?= $form->field($mode, 'item_name')->dropDownList($items,[]);?>

<div class="form-group">
    <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

在使用更新场景时,我只想从表单中呈现我的电子邮件、名字和姓氏。

 const SCENARIO_REGISTER = 'signup';
const SCENARIO_CREATE = 'create';
const SCENARIO_UPDATE = 'update';

 public function scenarios()
{
    return [

          self::SCENARIO_REGISTER => ['user_email', 'user_password_hash', 'user_fname', 'user_lname', 'agree','!user_password_hash_repeat','required'],
          self::SCENARIO_CREATE => ['user_email', 'user_password_hash', 'user_fname', 'user_lname','!user_password_hash_repeat','required'],
          self::SCENARIO_UPDATE => ['user_email', 'user_fname', 'user_lname', 'required'],
    ];
}

public static function tableName()
{
    return 'sim_user';
}

在我的 Controller 更新方法中,我使用的场景如下代码。

 public function actionUpdate($id)
    {
        $model = $this->findModel($id);
        $model->scenario = SimUser::SCENARIO_UPDATE;
       // var_dump($model->scenario); exit();
        $mode = \app\modules\auth\models\SimAuthAssignment::find()->where(['user_id' => $id])->one();


        if ($model->load(Yii::$app->request->post())&& $mode->load(Yii::$app->request->post())) {
            $model->save();

            return $this->redirect(['view', 'id' => $model->user_id]);
        } else {
            return $this->renderAjax('update', [
                'model' => $model,
                'mode' => $mode,
            ]);
        }
    }

我只想在编辑时在表单中呈现电子邮件、名字和姓氏表单字段。我想在编辑时忽略表单中的其他字段。我在这里错过了什么?谢谢!!

最佳答案

您正在使用带有所有 inputField 的 activeForm .. 所以所有字段都被提交 .. 如果您只想要电子邮件、名字和姓氏 您应该使用仅包含这些字段的另一个 View

<?php $form = ActiveForm::begin(); ?>

 <?= $form->errorSummary($model, $options = ['header'=>'', 'class'=>'pull-left errorDiv']); ?>

            <?= $form->field($model, 'user_fname')->textInput(['class'=>'form-control']);?>
            <?= $form->field($model, 'user_lname')->textInput(['class'=>'form-control']); ?>
            <?= $form->field($model,'user_email')->textInput(['class'=>'form-control']); ?>

<div class="form-group">
    <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
</div>

<?php ActiveForm::end(); ?>

场景然后仅检查您已规则的字段并且提交仅返回您需要的数据

关于Yii2 在创建和更新场景中使用不同的表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38399828/

相关文章:

php - Yii2 elasticsearch setAttributes()不起作用

PHP yii 2,有没有办法预取带有条件的相关模型

yii - 你能格式化yii2中DropDownList的样式吗?

yii2 更新没有主键的表

php - 如何在 Yii2 搜索模型中使用数组进行搜索

gridview - 如何在 Yii2 gridview 中连接两个表并获取值

php - 如何将具有相同索引和值的 2 个数组与 php 组合?

mysql - 将 Yii2 中的变量插入数据库

Yii2:我可以使用场景为不同的 Action 指定不同的模型字段集吗?