《PHP應(yīng)用:Yii2使用表單上傳文件的實(shí)例代碼》要點(diǎn):
本文介紹了PHP應(yīng)用:Yii2使用表單上傳文件的實(shí)例代碼,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:YII框架
PHP編程yii2用表單上傳文件經(jīng)常用到的,該怎樣上傳呢?
PHP編程1、單個文件上傳
PHP編程首先建立一個模型models/UploadForm.php,內(nèi)容如下
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編程再建立一個視圖文件,內(nèi)容如下
PHP編程
<?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() ?>
PHP編程最后建立控制器文件,內(nèi)容如下
PHP編程
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]);
}
}
PHP編程注意這里我們沒有用model->load(...),而是用了UploadedFile::getInstance(...).區(qū)別是后者不會執(zhí)行$model->validate(),所以需要手動的去執(zhí)行$model->validate()來檢驗(yàn)數(shù)據(jù)的合法性.如果檢驗(yàn)通過了,上傳的文件保存在uploads文件夾下,即web目錄下的uploads里.
PHP編程一些可選的配置選項(xiàng)
PHP編程上傳文件不能為空
PHP編程
public function rules()
{
return [
[['file'], 'file', 'skipOnEmpty' => false],
];
}
PHP編程上傳類型,不僅可以根據(jù)擴(kuò)展名檢驗(yàn),還可以根據(jù)文件的內(nèi)容進(jìn)行檢驗(yàn)
PHP編程
public function rules()
{
return [
[['file'], 'file', 'extensions' => 'jpg, png', 'mimeTypes' => 'image/jpeg, image/png',],
];
}
PHP編程2、多文件上傳
PHP編程如果你想一次上傳多個文件,只需調(diào)節(jié)幾個參數(shù)就可以達(dá)到目的
PHP編程Model:
PHP編程
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!
];
}
}
PHP編程View:
PHP編程
<?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(); ?>
PHP編程與單文件上傳不同的是下面這句
PHP編程
$form->field($model, 'file[]')->fileInput(['multiple' => true])
PHP編程Controller:
PHP編程
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編程這樣就可以實(shí)現(xiàn)多文件上傳了.
PHP編程參考https://github.com/yiisoft/yii2/blob/master/docs/guide/input-file-upload.md
PHP編程以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持維易PHP.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.snjht.com/jiaocheng/382.html