>  기사  >  백엔드 개발  >  양식을 사용하여 파일을 업로드하는 Yii2의 예

양식을 사용하여 파일을 업로드하는 Yii2의 예

巴扎黑
巴扎黑원래의
2017-08-15 13:15:321584검색

이 글에서는 양식을 사용하여 파일을 업로드하는 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; => [&#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!
    ];
  }
}

보기:

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

Controller:

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]);
  }
}

이렇게 하면 여러 파일을 업로드할 수 있습니다.

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

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