【问题标题】:Validating array of inputs in a form Yii2以 Yii2 形式验证输入数组
【发布时间】:2020-06-22 20:39:51
【问题描述】:

我一直在开发一个系统来创建动态提问者,组织者可以在其中创建问题供用户回答,但我在验证用户对提问者的回答时遇到了问题。我有三种类型的输入可供组织者创建,一个简短的答案,一个长答案和一个输入字段。我尝试使用 Each 验证规则,但它似乎不起作用。我到处寻找答案,但没有找到任何有效的方法。 这是我的代码。

查看

<?php $form = ActiveForm::begin([ 'id' => 'respuesta-form', 'enableAjaxValidation' => true, 'options' => ['enctype' => 'multipart/form-data'], ]); ?>
<?php foreach ($preguntas as $i => $pregunta): ?>

<?php if($pregunta->tipo == 1): ?>
    <?= $form->field($model, "respuesta[$i]")->textInput(['maxlength' => true])->label("<strong>" . $pregunta->descripcion . "</strong>")  ?>
<?php endif; ?>

    <?php if($pregunta->tipo == 2): ?>
        <?= $form->field($model, "respuesta[$i]")->textarea(['maxlength' => true], ["style" => "resize: none;"])->label("<strong>" . $pregunta->descripcion . "</strong>")  ?>
    <?php endif; ?>

    <?php if($pregunta->tipo == 3): ?>
        <?= $form->field($model, "respuesta[$i]")->fileInput()->label("<strong>" . $pregunta->descripcion . "</strong>") ?>
    <?php endif; ?>

<?php endforeach; ?>

<div class="form-group">
    <?= Html::submitButton('Guardar', ['class' => 'btn btn-success']) ?>
</div>

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

型号

        public function rules()
{
    return [
        [['idpregunta', 'idinscripcion'], 'required'],
        ['respuesta', 'each', 'rule' => ['required']],
        [['idpregunta', 'idinscripcion'], 'integer'],
        [['respuesta'], 'string', 'max' => 500],
        [['idpregunta'], 'exist', 'skipOnError' => true, 'targetClass' => Pregunta::className(), 'targetAttribute' => ['idpregunta' => 'id']],
        [['idinscripcion'], 'exist', 'skipOnError' => true, 'targetClass' => Inscripcion::className(), 'targetAttribute' => ['idinscripcion' => 'idInscripcion']],
    ];
}

控制器

    public function actionResponderFormulario($slug){

    $evento = $this->findModel("", $slug);
    $inscripcion = Inscripcion::find()->where(["idEvento" => $evento->idEvento, "idUsuario" => Yii::$app->user->identity->idUsuario])->one();
    $preguntas = Pregunta::find()->where(["idevento" => $evento->idEvento])->all();

    $model = new Pregunta();

    if($inscripcion ==null){
        $preguntas = Pregunta::find()->where(["idevento" => $evento->idEvento])->all();
        return $this->render('responderFormulario',
            ["preguntas" => $preguntas,
                "eventos" => $evento,
                "model" => $model]);
    }
}

对我来说最重要的是要对问题进行总体验证,我不太关心单独验证每种类型,因为我以后可能会删除它。 提前谢谢你

【问题讨论】:

    标签: validation yii yii2 yii2-advanced-app


    【解决方案1】:

    我认为这部分字符串验证的最大长度应该改为:

    ['respueusta', 'each', 'rule' => ['string', 'max' => 500]]
    

    有时 respuesta 字段会接收到 tipo=3 中的文件,对于干净和结构化的代码,您不能这样做。为文件定义另一个字段。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-23
      • 2023-03-19
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 2015-03-25
      相关资源
      最近更新 更多