Upload File di Yii2
Uploading Files
Mengunggah file dalam Yii dilakukan melalui model formulir, aturan validasi dan beberapa kode pengontrol. Mari kita tinjau apa yang diperlukan untuk menangani unggahan dengan benar.
Uploading single file
Pertama-tama, Anda perlu membuat model yang akan menangani unggahan file. Buat model / UploadForm.php dengan konten berikut:
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'],
];
}
}
Dalam kode di atas, kami telah membuat model UploadForm dengan file atribut yang akan menjadi
<input type = "file"> dalam bentuk HTML. Atribut ini memiliki aturan validasi bernama file yang
menggunakan [[yii \ validators \ FileValidator | FileValidator]].
Form View
Selanjutnya, buat tampilan yang akan merender form:
<?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() ?>
'Enctype' => 'multipart / form-data' diperlukan karena memungkinkan upload file. fileInput ()
merupakan field input form.
Controller
Sekarang buat pengontrol yang menghubungkan formulir dan model bersama-sama:
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]);
}
}
bukannya model-> load (...), kami menggunakan UploadedFile :: getInstance (...). [[yy \ web \ UploadedFile | UploadedFile]]
tidak menjalankan validasi model, tetapi hanya menyediakan informasi tentang file yang diunggah. Oleh karena itu,
Anda perlu menjalankan validasi secara manual melalui $ model-> validate () untuk memicu [[yii \ validators \ FileValidator | FileValidator]].
Validator mengharapkan bahwa atribut adalah file yang diunggah.
Uploading multiple files
Jika Anda perlu mengunggah banyak file sekaligus, beberapa penyesuaian diperlukan.
Model :
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]) ?> Perbedean dengan single file
<button>Submit</button>
<?php ActiveForm::end(); ?>
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, 'file');
if ($model->file && $model->validate()) {
foreach ($model->file as $file) {
$file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);
}
}
}
return $this->render('upload', ['model' => $model]);
}
}
Sekian ^^
Komentar
Posting Komentar