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(['options' => ['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]); } }
여기서는 model->load(...)를 사용하지 않고 UploadedFile::getInstance(...)를 사용했습니다. 차이점은 후자가 $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(['options' => ['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 중국어 홈페이지를 방문해주세요! !
위 내용은 yii2에서 파일을 업로드하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!