>  기사  >  백엔드 개발  >  Yii2는 양식 업로드 파일 기능을 구현합니다.

Yii2는 양식 업로드 파일 기능을 구현합니다.

小云云
小云云원래의
2018-01-30 14:01:542006검색

이 글에서는 양식을 사용하여 파일을 업로드하는 Yii2의 예제 코드를 주로 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 편집자를 따라가서 모두에게 도움이 되기를 바랍니다.

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; => ['enctype' => 'multipart/form-data']]) ?>

<?= $form->field($model, 'file')->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, 'file');

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

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

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

일부 선택적 구성 옵션

업로드된 파일은 비워둘 수 없습니다

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

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

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

2. 다중 파일 업로드

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

모델:

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

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

View:

<?php
use yii\widgets\ActiveForm;

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

<?= $form->field($model, 'file[]')->fileInput(['multiple' => true]) ?>

  <button>Submit</button>

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

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

$form->field($model, 'file[]')->fileInput(['multiple' => 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, 'file');

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

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

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

관련 권장 사항:

PHP 및 AjaxForm은 진행률 표시줄을 사용하여 비동기 파일 업로드를 구현합니다.

jQuery ajaxupload 플러그인을 사용하여 새로 고치지 않는 업로드 파일에 대한 자세한 설명

Ajax 양식 비동기 파일 업로드 예제 코드에 대한 자세한 설명

위 내용은 Yii2는 양식 업로드 파일 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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