正在验证表单Yii2中的输入数组

exdqitrt  于 2022-11-09  发布在  其他
关注(0)|答案(1)|浏览(166)

我一直在开发一个系统来创建一个动态的提问者,组织者可以在其中创建问题让用户回答,但是我在验证用户对提问者的回答时遇到了麻烦。我有三种类型的输入可供组织者创建,一个短答案、一个长答案和一个输入字段。我尝试使用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]);
    }
}

对我来说,最重要的事情是对问题进行总体验证,我不太在乎分别验证每种类型,因为我可能会在稍后删除它。

mec1mxoz

mec1mxoz1#

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

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

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

相关问题