国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Home Backend Development PHP Tutorial Detailed usage tutorial of Yii2 component multi-image upload plug-in FileInput_php example

Detailed usage tutorial of Yii2 component multi-image upload plug-in FileInput_php example

Jul 06, 2016 pm 01:32 PM

I will write an article about file uploading for you earlier, including the most basic yii2 file uploading, asynchronous uploading to Youpaiyun, and Baidu Editor image uploading issues. It seems that it is not perfect if I don’t mention multi-image uploading.

Today we introduce FileInput, a multi-image upload plug-in. As for why we chose TA as our upload plug-in, firstly, this product has something to do with Yii2 and is easy to use; secondly, using this plug-in is not only good when adding When operating and modifying, you can also directly delete pictures silently in an asynchronous manner; the most noteworthy thing is that the interface effect incorporates bootstrap, which is refreshing, concise, beautiful, and comfortable to look at.

Tell the key points and look at the specific steps

First, install the components

Copy code The code is as follows:

composer require kartik-v/yii2-widget-fileinput "@dev"

First make a necessary explanation: Suppose we have a product table and a product image table. The product image table only stores the product id and image address

See basic usage

use kartik\file\FileInput;
// 非ActiveForm的表單
echo '<label class="control-label">圖片</label>';
echo FileInput::widget([
'model' => $model,
'attribute' => 'image[]',
'options' => ['multiple' => true]
]);
//使用ActiveForm的表單
echo $form->field($model, 'image[]')->widget(FileInput::classname(), [
'options' => ['multiple' => true],
]);

To upload multiple images above, just set multiple=true. Remember to select multiple images when selecting images.

In this way, just submit the form directly after selecting the image. The file upload procedure needs to be handled by yourself. If you have not implemented it yet, you can refer to the basic operation of file upload.

The only trouble with uploading multiple pictures is how to make it convenient when modifying? Don’t worry, FileInput has solved it for us!

Let’s look at how images are displayed during editing and how to delete single or multiple images asynchronously!

// 視圖文件
use kartik\file\FileInput;
<&#63;php $form = ActiveForm::begin([
'options' => ['enctype'=>'multipart/form-data'],
]); &#63;>
<&#63;php 
echo $form->field($model, 'banner_url[]')->label('banner圖')->widget(FileInput::classname(), [
'options' => ['multiple' => true],
'pluginOptions' => [
// 需要預(yù)覽的文件格式
'previewFileType' => 'image',
// 預(yù)覽的文件
'initialPreview' => ['圖片1', '圖片2', '圖片3'],
// 需要展示的圖片設(shè)置,比如圖片的寬度等
'initialPreviewConfig' => ['width' => '120px'],
// 是否展示預(yù)覽圖
'initialPreviewAsData' => true,
// 異步上傳的接口地址設(shè)置
'uploadUrl' => Url::toRoute(['/goods/async-image']),
// 異步上傳需要攜帶的其他參數(shù),比如商品id等
'uploadExtraData' => [
'goods_id' => $id,
],
'uploadAsync' => true,
// 最少上傳的文件個數(shù)限制
'minFileCount' => 1,
// 最多上傳的文件個數(shù)限制
'maxFileCount' => 10,
// 是否顯示移除按鈕,指input上面的移除按鈕,非具體圖片上的移除按鈕
'showRemove' => true,
// 是否顯示上傳按鈕,指input上面的上傳按鈕,非具體圖片上的上傳按鈕
'showUpload' => true,
//是否顯示[選擇]按鈕,指input上面的[選擇]按鈕,非具體圖片上的上傳按鈕
'showBrowse' => true,
// 展示圖片區(qū)域是否可點擊選擇多文件
'browseOnZoneClick' => true,
// 如果要設(shè)置具體圖片上的移除、上傳和展示按鈕,需要設(shè)置該選項
'fileActionSettings' => [
// 設(shè)置具體圖片的查看屬性為false,默認(rèn)為true
'showZoom' => false,
// 設(shè)置具體圖片的上傳屬性為true,默認(rèn)為true
'showUpload' => true,
// 設(shè)置具體圖片的移除屬性為true,默認(rèn)為true
'showRemove' => true,
],
],
// 一些事件行為
'pluginEvents' => [
// 上傳成功后的回調(diào)方法,需要的可查看data后再做具體操作,一般不需要設(shè)置
"fileuploaded" => "function (event, data, id, index) {
console.log(data);
}",
],
]);
&#63;>
<&#63;php ActiveForm::end(); &#63;>

As mentioned above, they are basically the basic properties and settings of the component FileInput. We only list some commonly used properties here. If necessary, you can check the document for detailed descriptions of properties.

According to the above configuration, let’s preview the effect picture

It feels like the effect is very good. Before starting to write the PHP code to implement, we first implement the configuration of initialPreview and initialPreviewConfig in the controller

Assuming that the above view file is a detail page where users display product images, and the current controller refers to the controller that renders the view file, you need to obtain the image associated with the product in the controller for display or deletion of the product image. Add operations.

// 假設(shè)商品的圖片是 $relationBanners,$id是商品的id
// $relationBanners的數(shù)據(jù)結(jié)構(gòu)如:
/**
* Array
*(
* [0] => Array
* (
* [id] => 1484314
* [goods_id] => 1173376
* [banner_url] => ./uploads/20160617/146612713857635322241f2.png
* )
*
*)
*/
$relationBanners = Banner::find()->where(['goods_id' => $id])->asArray()->all();
// 對商品banner圖進(jìn)行處理
$p1 = $p2 = [];
if ($relationBanners) {
foreach ($relationBanners as $k => $v) {
$p1[$k] = $v['banner_url'];
$p2[$k] = [
'url' => Url::toRoute('/banner/delete'),
'key' => $v['id'],
];
}
}
$model = new Banner;
return $this->render('banner', [
'model' => $model,
'p1' => $p1,
'p2' => $p2,
'id' => $id
]);

You can see that p1 is a collection of image addresses, which is used to assign to initialPreview

p2 is a set of urls and keys, which is used to assign values ??to initialPreviewConfig

Where url is the request address to remove the image

key is the id corresponding to each image

At this point the pluginOptions in our view file should look like this

'pluginOptions' => [
// other code
'initialPreview' => $p1,
'initialPreviewConfig' => $p2,
// other code
],

Be careful to set initialPreviewAsData to true, otherwise the preview will not be displayed after the image is created.

We configured uploadUrl in the initial configuration file. This parameter is the asynchronously uploaded image address.

Now the upload interface should be bare. After we select a picture, the effect is as shown in Figure 2 above,

It should be reminded that the upload on each small picture is to upload the corresponding small picture. The upload and removal of the input box (lower right corner) are operations for all pictures. One is uploaded, and ten are uploaded. Upload, here we only provide a necessary explanation for the operation of uploading multiple images.

We have prepared the image upload address and additional parameters required for uploading (such as product ID). The additional parameter configuration item is uploadExtraData. For details, see the configuration in the view file above.

Then let’s look at the program implementation of /goods/async-image asynchronous upload

public function actionAsyncImage ()
{
// 商品ID
$id = Yii::$app->request->post('goods_id');
$p1 = $p2 = [];
if (empty($_FILES['Banner']['name']) || empty($_FILES['Banner']['name']['banner_url']) || !$id) {
echo '{}';
return;
}
for ($i = 0; $i < count($_FILES['Banner']['name']['banner_url']); $i++) {
$url = '/banner/delete';
$imageUrl = ''; //調(diào)用圖片接口上傳后返回圖片地址
// 圖片入庫操作,此處不可以批量直接入庫,因為后面我們還要把key返回 便于圖片的刪除
$model = new Banner;
$model->goods_id = $id;
$model->banner_url = $imageUrl;
$key = 0;
if ($model->save(false)) {
$key = $model->id;
}
// $pathinfo = pathinfo($imageUrl);
// $caption = $pathinfo['basename'];
// $size = $_FILES['Banner']['size']['banner_url'][$i];
$p1[$i] = $imageUrl;
$p2[$i] = ['url' => $url, 'key' => $key];
}
echo json_encode([
'initialPreview' => $p1, 
'initialPreviewConfig' => $p2, 
'append' => true,
]);
return;
}

At this point, we have completed the work of uploading single images and multiple images.

In order to achieve the effect of deleting pictures, you can upload two pictures first. You can upload a single image or multiple images.

After the upload is successful, you can refresh the current page. Because we have implemented the image preview in the controller from the beginning, the two images we have uploaded should be displayed.

According to our configuration, the current preview should look like this.

Without talking nonsense, let’s look at the implementation of the image deletion program (/banner/delete)

public function actionDelete ()
{
if ($id = Yii::$app->request->post('key')) {
$model = $this->findModel($id);
$model->delete();
}
Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
return ['success' => true];
}

It should be reminded that the key is the key specified when we configure the initialPreviewConfig item. You can refer to the key in the controller or the key of p2 after the asynchronous upload is successful.

At this point, we have given the specific implementation of the component usage and program code for multi-image upload in yii2.

The above is the entire description of the detailed usage tutorial of the Yii2 component multi-image upload plug-in FileInput introduced by the editor. I hope it will be helpful to you. If you have any questions, please leave me a message and the editor will promptly Reply to everyone. I would also like to thank you all for your support of the Script House website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are some best practices for versioning a PHP-based API? What are some best practices for versioning a PHP-based API? Jun 14, 2025 am 12:27 AM

ToversionaPHP-basedAPIeffectively,useURL-basedversioningforclarityandeaseofrouting,separateversionedcodetoavoidconflicts,deprecateoldversionswithclearcommunication,andconsidercustomheadersonlywhennecessary.StartbyplacingtheversionintheURL(e.g.,/api/v

How do I implement authentication and authorization in PHP? How do I implement authentication and authorization in PHP? Jun 20, 2025 am 01:03 AM

TosecurelyhandleauthenticationandauthorizationinPHP,followthesesteps:1.Alwayshashpasswordswithpassword_hash()andverifyusingpassword_verify(),usepreparedstatementstopreventSQLinjection,andstoreuserdatain$_SESSIONafterlogin.2.Implementrole-basedaccessc

What are the differences between procedural and object-oriented programming paradigms in PHP? What are the differences between procedural and object-oriented programming paradigms in PHP? Jun 14, 2025 am 12:25 AM

Proceduralandobject-orientedprogramming(OOP)inPHPdiffersignificantlyinstructure,reusability,anddatahandling.1.Proceduralprogrammingusesfunctionsorganizedsequentially,suitableforsmallscripts.2.OOPorganizescodeintoclassesandobjects,modelingreal-worlden

What are weak references (WeakMap) in PHP, and when might they be useful? What are weak references (WeakMap) in PHP, and when might they be useful? Jun 14, 2025 am 12:25 AM

PHPdoesnothaveabuilt-inWeakMapbutoffersWeakReferenceforsimilarfunctionality.1.WeakReferenceallowsholdingreferenceswithoutpreventinggarbagecollection.2.Itisusefulforcaching,eventlisteners,andmetadatawithoutaffectingobjectlifecycles.3.YoucansimulateaWe

How can you handle file uploads securely in PHP? How can you handle file uploads securely in PHP? Jun 19, 2025 am 01:05 AM

To safely handle file uploads in PHP, the core is to verify file types, rename files, and restrict permissions. 1. Use finfo_file() to check the real MIME type, and only specific types such as image/jpeg are allowed; 2. Use uniqid() to generate random file names and store them in non-Web root directory; 3. Limit file size through php.ini and HTML forms, and set directory permissions to 0755; 4. Use ClamAV to scan malware to enhance security. These steps effectively prevent security vulnerabilities and ensure that the file upload process is safe and reliable.

How can you interact with NoSQL databases (e.g., MongoDB, Redis) from PHP? How can you interact with NoSQL databases (e.g., MongoDB, Redis) from PHP? Jun 19, 2025 am 01:07 AM

Yes, PHP can interact with NoSQL databases like MongoDB and Redis through specific extensions or libraries. First, use the MongoDBPHP driver (installed through PECL or Composer) to create client instances and operate databases and collections, supporting insertion, query, aggregation and other operations; second, use the Predis library or phpredis extension to connect to Redis, perform key-value settings and acquisitions, and recommend phpredis for high-performance scenarios, while Predis is convenient for rapid deployment; both are suitable for production environments and are well-documented.

What are the differences between == (loose comparison) and === (strict comparison) in PHP? What are the differences between == (loose comparison) and === (strict comparison) in PHP? Jun 19, 2025 am 01:07 AM

In PHP, the main difference between == and == is the strictness of type checking. ==Type conversion will be performed before comparison, for example, 5=="5" returns true, and ===Request that the value and type are the same before true will be returned, for example, 5==="5" returns false. In usage scenarios, === is more secure and should be used first, and == is only used when type conversion is required.

How do I perform arithmetic operations in PHP ( , -, *, /, %)? How do I perform arithmetic operations in PHP ( , -, *, /, %)? Jun 19, 2025 pm 05:13 PM

The methods of using basic mathematical operations in PHP are as follows: 1. Addition signs support integers and floating-point numbers, and can also be used for variables. String numbers will be automatically converted but not recommended to dependencies; 2. Subtraction signs use - signs, variables are the same, and type conversion is also applicable; 3. Multiplication signs use * signs, which are suitable for numbers and similar strings; 4. Division uses / signs, which need to avoid dividing by zero, and note that the result may be floating-point numbers; 5. Taking the modulus signs can be used to judge odd and even numbers, and when processing negative numbers, the remainder signs are consistent with the dividend. The key to using these operators correctly is to ensure that the data types are clear and the boundary situation is handled well.

See all articles