>  기사  >  백엔드 개발  >  yii2에서 파일을 업로드하는 방법은 무엇입니까?

yii2에서 파일을 업로드하는 방법은 무엇입니까?

巴扎黑
巴扎黑원래의
2017-08-17 08:13:595206검색

yii2에서 파일을 업로드하는 방법은 무엇입니까?

Yii2 UploadedFile은 파일 업로드를 구현합니다

Yii에서 파일을 업로드하려면 일반적으로 업로드된 각 파일을 UploadedFile 개체로 캡슐화하는 yiiwebUploadedFile 클래스를 사용합니다. yiiwidgetsActiveForm과 모델을 결합하면 안전한 파일 업로드 메커니즘을 쉽게 구현할 수 있습니다.

1. 단일 파일 업로드

먼저 다음 내용으로 models/UploadForm.php를 생성합니다.

namespace app\models;

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

/**
 * UploadForm is the model behind the upload form.
 */
class UploadForm extends Model
{
    /**
     * @var UploadedFile file attribute
     */
    public $file;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [['file'], 'file'],
        ];
    }
}

다음 내용으로 뷰 파일을 생성합니다.

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

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

<?= $form->field($model, &#39;file&#39;)->fileInput() ?>

<button>Submit</button>

<?php ActiveForm::end() ?>

마지막으로 다음 내용으로 컨트롤러 파일을 생성합니다.

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;

class SiteController extends Controller
{
    public function actionUpload()
    {
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->file = UploadedFile::getInstance($model, &#39;file&#39;);

            if ($model->file && $model->validate()) {                
                $model->file->saveAs(&#39;uploads/&#39; . $model->file->baseName . &#39;.&#39; . $model->file->extension);
            }
        }

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

여기서는 model->load(...)를 사용하지 않고 UploadedFile::getInstance(...)를 사용했습니다. 차이점은 후자가 $model->validate()를 실행하지 않으므로 데이터의 유효성을 확인하려면 $model->validate()를 수동으로 실행해야 한다는 것입니다. 테스트에 통과하면 업로드된 파일은 uploads 폴더, 즉 웹 디렉터리에 업로드됩니다.

일부 선택적 구성 옵션
업로드된 파일은 비워둘 수 없습니다

public function rules(){
    return [
        [[&#39;file&#39;], &#39;file&#39;, &#39;skipOnEmpty&#39; => false],
    ];
}

업로드 유형은 확장자뿐만 아니라 파일 내용에 따라 확인할 수 있습니다

public function rules(){
    return [
        [[&#39;file&#39;], &#39;file&#39;, &#39;extensions&#39; => &#39;jpg, png&#39;, &#39;mimeTypes&#39; => &#39;image/jpeg, image/png&#39;,],
    ];
}

2. 다중 파일 업로드

한 번에 여러 파일을 업로드하려면 몇 가지 매개변수만 조정하면 목표를 달성할 수 있습니다

모델:

class UploadForm extends Model
{
    /**
     * @var UploadedFile|Null file attribute
     */
    public $file;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
            [[&#39;file&#39;], &#39;file&#39;, &#39;maxFiles&#39; => 10], // <--- here!
        ];
    }
}

View:

<?php
use yii\widgets\ActiveForm;

$form = ActiveForm::begin([&#39;options&#39; => [&#39;enctype&#39; => &#39;multipart/form-data&#39;]]);
?>

<?= $form->field($model, &#39;file[]&#39;)->fileInput([&#39;multiple&#39; => true]) ?>

    <button>Submit</button>

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

단일 파일 업로드와의 차이점은 다음 문장입니다

$form->field($model, &#39;file[]&#39;)->fileInput([&#39;multiple&#39; => true])

컨트롤러:

namespace app\controllers;

use Yii;
use yii\web\Controller;
use app\models\UploadForm;
use yii\web\UploadedFile;

class SiteController extends Controller
{
    public function actionUpload()
    {
        $model = new UploadForm();

        if (Yii::$app->request->isPost) {
            $model->file = UploadedFile::getInstances($model, &#39;file&#39;);

            if ($model->file && $model->validate()) {
                foreach ($model->file as $file) {
                    $file->saveAs(&#39;uploads/&#39; . $file->baseName . &#39;.&#39; . $file->extension);
                }
            }
        }

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

이것은 여러 파일을 업로드할 수 있습니다.

더 많은 관련 지식을 알고 싶으시다면 PHP 중국어 홈페이지를 방문해주세요! !

위 내용은 yii2에서 파일을 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.