2016-06-08 01:32:48 2649次浏览 1条回答 0 悬赏 10 金钱

加上了$model->validate()验证,文件上传校验失败,提示未上传文件。像是个bug。去掉验证到是能正常上传

控制器

public function actionTest()
{

        $model = new DynamicModel();
        $name='imagefile';
        $model->defineAttribute("$name");
        $model->addRule("$name", 'file',['skipOnEmpty' => false,'extensions' => 'png, jpg']);
        
            if (Yii::$app->request->isPost && $model->validate()) {
            $model->imagefile = UploadedFile::getInstance($model, 'imagefile');
          
          if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post()) && $model->validate()) {
                // 文件上传成功
                //return;
            }
        }
          return $this->render('test', [
                'model' => $model,
            ]);/* */
         //var_dump($model->imagefile);
}

view

<?php
use yii\widgets\ActiveForm;
?>

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

<?= $form->field($model, 'imagefile')->fileInput() ?>

<button>Submit</button>

<?php ActiveForm::end() ?>

  • 回答于 2016-06-08 08:46 举报

    验证之前未赋值

    1 条回复
    回复于 2016-06-08 21:58 回复

    嗯,粗心了,
    if (Yii::$app->request->isPost && $model->validate()) {
    这句改成
    if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post()) && $model->validate()) {
    问题依旧。
    感觉是DynamicModel的问题,AR model就没这种问题。
    另外想再确认一下:$model->validate()是服务端验证;只要加了rule就会有客户端的验证对吧?

您需要登录后才可以回答。登录 | 立即注册
搞搞的传奇
见习主管

搞搞的传奇

注册时间:2015-02-24
最后登录:2020-06-04
在线时长:24小时46分
  • 粉丝8
  • 金钱5
  • 威望10
  • 积分345

热门问题