【问题标题】:Yii Framework File UploadYii 框架文件上传
【发布时间】:2021-09-12 08:07:00
【问题描述】:

我正在尝试学习如何在 Yii 中上传图像文件。我正在使用此代码

    <?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() ?>

在 ProjectFile/views/site/upload.php 文件中。 问题出在

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

$model 给了我一个红色下划线。我看过很多例子,他们都写了这样的。 我需要做些什么来阻止这个问题?

编辑: 在controller/SiteController.php里面

// function for upload
    public function actionUploadImage()
    {
        $model = new UploadImageForm();

        if (Yii::$app->request->isPost) {
            $model->imageFile = UploadedFile::getInstance($model, 'imageFile');
            if ($model->upload()) {
                // file is uploaded successfully
                return;
            }
        }

        return $this->render('upload', ['model' => $model]);
    }

在models/UploadImageForm.php中

<?php


namespace app\models;

use yii\base\Model;
use yii\web\UploadedFile;

class UploadImageForm extends \yii\base\Model
{

    public $imageFile;

    // gives rules of how to upload picture
    public function rules(){
        return [
          [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }

    // uploads picture
    public function upload(){
        if($this->validate()){
            $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
        }
    }

}

【问题讨论】:

  • 您是否按照documentation中的指南进行操作?
  • 红色下划线 - 你的意思是文件输入字段有红色边框,并且在字段下方/上方/附近出现一些错误消息?如果这是你的情况,那么你有验证问题。请提供您的模型的规则方法代码(在表单中使用)
  • @DefinitelynotRafal 是的,我查看了您分享的文档。
  • @neolodor 我需要使用哪种类型的验证?
  • @gun 取决于您要实现的文件存储逻辑:如果您只想在服务器上的某个目录中上传文件,请按照yii2 docs 从更新中看到您已经完成。但是: 1. 模型方法upload 必须返回一些结果。在您的情况下,它什么也不返回。 2. 尝试上传文件无效后查看错误日志 - 可能是您有一些文件权限问题。

标签: php image file-upload yii


【解决方案1】:
  1. 请确保模型具有名为“imageFile”的属性/字段
  2. 检查您的编辑器是否在您的编辑器上出现红线,然后是与您的编辑器相关的问题

【讨论】:

    【解决方案2】:

    同样的事情发生在我身上,你的视图代码很好。我的也是一样,我通过在模型函数中使用这些行使其工作:

    $imageFile= UploadedFile::getInstances($model, 'imageFile')[0];
    $imageFile->saveAs('uploads/' . $imageFile->baseName . '.' . $imageFile->extension);
    

    在控制器动作中:

    $model->imageFile= UploadedFile::getInstances($model, 'imageFile')[0];
    

    【讨论】:

      【解决方案3】:

      在views\upload.php 中显示红色下划线是因为系统找不到$model。运行时,程序会将 $model 连接到控制器。所以红色下划线对于php文件来说不是问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-05-23
        • 1970-01-01
        • 1970-01-01
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多