ホームページ >バックエンド開発 >PHPチュートリアル >yii2 マルチイメージ アップロード コンポーネントの使用法チュートリアル PHP の例

yii2 マルチイメージ アップロード コンポーネントの使用法チュートリアル PHP の例

jacklove
jackloveオリジナル
2018-06-25 17:59:181668ブラウズ

この記事では主に yii2 マルチイメージアップロードコンポーネントの使用に関するチュートリアルを紹介します。使用時に注意すべき点が多数ありますので、必要な方は Script Home プラットフォームで共有してください。

最近、yii2 を使用してフォーム ページを開発していたときに、複数の画像をアップロードする必要があり、この領域のコンポーネントを検索したところ、基本的に Amway fileInput コンポーネントを見つけたので、使用してみました。このライブラリを使用して、バックエンド フォーム ページを完成させます。使っていくうちに、まだまだ細かい点で注意すべき点がたくさんあることがわかったので、使用過程を記録してみました。

yii2-widget-fileinput このライブラリの github アドレスはここにあります。インストール部分はドキュメントに従うだけです。

公式ドキュメントに示されているいくつかの一般的な操作を見てみましょう:

use kartik\widgets\FileInput
// or 'use kartikile\FileInput' if you have only installed yii2-widget-fileinput in isolation
// 使用ActiveForm 和 model绑定的单张图片示例
echo $form->field($model, 'avatar')->widget(FileInput::classname(), [
  'options' => ['accept' => 'image/*'],
]);
// 多图上传示例
echo &#39;<label class="control-label">Add Attachments</label>&#39;;
echo FileInput::widget([
  &#39;model&#39; => $model,
  &#39;attribute&#39; => &#39;attachment_1[]&#39;,
  &#39;options&#39; => [&#39;multiple&#39; => true]
]);
// 不绑定model的使用方法
echo &#39;<label class="control-label">Upload Document</label>&#39;;
echo FileInput::widget([
  &#39;name&#39; => &#39;attachment_3&#39;,
]);
// 不可点击的示例
echo &#39;<label class="control-label">Select Attachment</label>&#39;;
echo FileInput::widget([
  &#39;name&#39; => &#39;attachment_4&#39;,
  &#39;disabled&#39; => true
]);

そして、これらは一般的な操作です。想像してみましょう。タオバオで商品の追加が完了すると、1 対多の関係で複数の写真が含まれる商品テーブルが作成されます。このとき、マルチ写真アップロード機能を使用する必要があります。また、画像を非同期でアップロードしたいので、次のように fileInput コンポーネントを構成できます。

<?= $form->field($model, &#39;image[]&#39;)->label($label)->widget(FileInput::classname(), [
  // &#39;name&#39; => &#39;ImgSelect&#39;,
  &#39;language&#39; => &#39;zh-CN&#39;, 
  &#39;options&#39; => [&#39;multiple&#39; => true, &#39;accept&#39; => &#39;image/*&#39;], 
  &#39;pluginOptions&#39; => [ 
    &#39;initialPreview&#39; => $initialPreview, 
    &#39;initialPreviewConfig&#39; => $initialPreviewConfig, 
    &#39;allowedPreviewTypes&#39; => [&#39;image&#39;], 
    &#39;allowedFileExtensions&#39; => [&#39;jpg&#39;, &#39;gif&#39;, &#39;png&#39;], 
    &#39;previewFileType&#39; => &#39;image&#39;, 
    &#39;overwriteInitial&#39; => false, 
    &#39;browseLabel&#39; => &#39;选择图片&#39;,
    &#39;msgFilesTooMany&#39; => "选择上传的图片数量({n}) 超过允许的最大图片数{m}!", 
    &#39;maxFileCount&#39; => 5,//允许上传最多的图片5张 
    &#39;maxFileSize&#39; => 2048,//限制图片最大200kB 
    &#39;uploadUrl&#39; => Url::to([&#39;/upload/image&#39;]),
    //&#39;uploadExtraData&#39; => [&#39;testid&#39; => &#39;listimg&#39;], 
    &#39;uploadAsync&#39; => true,//配置异步上传还是同步上传 
  ],
  &#39;pluginEvents&#39; => [ 
    &#39;filepredelete&#39; => "function(event, key) { 
        return (!confirm(&#39;确认要删除&#39;)); 
      }", 
    &#39;fileuploaded&#39; => &#39;function(event, data, previewId, index) { 
        $(event.currentTarget.closest("form")).append(data.response.imgfile);
      }&#39;, 
    &#39;filedeleted&#39; => &#39;function(event, key) { 
        $(event.currentTarget.closest("form")).find("#"+key).remove(); 
        return;
      }&#39;, 
  ]
]); ?>

画像閲覧構成をコントローラーで構成し、それを渡します。で。コードの主要なポイントに構成を追加しました。アップロード/画像コントローラーに非同期アップロード URL が構成されており、削除、アップロード、その他の操作が完了したときの js も追加されています。

上で述べたように、FileInput コンポーネントの基本的なプロパティと設定をいくつかリストしました。必要に応じて、プロパティの詳細な説明についてドキュメントを確認してください。

画像をアップロードするコントローラーで actionImage 関数をどのように記述するかを見てください。

/** 
  * 上传图片到临时目录 
  * @return string 
  * @throws \yii\base\Exception 
  */ 
 public function actionImage() 
 { 
   if (Yii::$app->request->isPost) { 
     $res = []; 
     $initialPreview = []; 
     $initialPreviewConfig = []; 
     $images = UploadedFile::getInstancesByName("UploadImage[image]"); 
     if (count($images) > 0) { 
       foreach ($images as $key => $image) { 
         if ($image->size > 2048 * 1024) { 
           $res = [&#39;error&#39; => &#39;图片最大不可超过2M&#39;]; 
           return json_encode($res); 
         } 
         if (!in_array(strtolower($image->extension), array(&#39;gif&#39;, &#39;jpg&#39;, &#39;jpeg&#39;, &#39;png&#39;))) { 
           $res = [&#39;error&#39; => &#39;请上传标准图片文件, 支持gif,jpg,png和jpeg.&#39;]; 
           return json_encode($res); 
         } 
         $dir = &#39;/uploads/temp/&#39;; 
         //生成唯一uuid用来保存到服务器上图片名称 
         $pickey = ToolExtend::genuuid(); 
         $filename = $pickey . &#39;.&#39; . $image->getExtension();
         //如果文件夹不存在,则新建文件夹 
         if (!file_exists(Yii::getAlias(&#39;@backend&#39;) . &#39;/web&#39; . $dir)) { 
           FileHelper::createDirectory(Yii::getAlias(&#39;@backend&#39;) . &#39;/web&#39; . $dir, 777); 
         } 
         $filepath = realpath(Yii::getAlias(&#39;@backend&#39;) . &#39;/web&#39; . $dir) . &#39;/&#39;; 
         $file = $filepath . $filename; 
         if ($image->saveAs($file)) { 
           $imgpath = $dir . $filename; 
           /*Image::thumbnail($file, 100, 100) 
             ->save($file . &#39;_100x100.jpg&#39;, [&#39;quality&#39; => 80]); 
*/ 
          //  array_push($initialPreview, "<img src=&#39;" . $imgpath . "&#39; class=&#39;file-preview-image&#39; alt=&#39;" . $filename . "&#39; title=&#39;" . $filename . "&#39;>"); 
           $config = [ 
             &#39;caption&#39; => $filename, 
             &#39;width&#39; => &#39;120px&#39;, 
             &#39;url&#39; => &#39;../upload/delete&#39;, // server delete action 
             &#39;key&#39; => $pickey,
             &#39;extra&#39; => [&#39;filename&#39; => $filename] 
           ];
           array_push($initialPreviewConfig, $config); 
           $res = [ 
             "initialPreview" => $initialPreview, 
             "initialPreviewConfig" => $initialPreviewConfig, 
             "imgfile" => "<input name=&#39;image[]&#39; id=&#39;" . $pickey . "&#39; type=&#39;hidden&#39; value=&#39;" . $imgpath . "&#39;/>",
             &#39;filename&#39; => $filename,
             &#39;imagePath&#39; => $imgpath,
           ]; 
         }
       } 
     } 
     return json_encode($res); 
   } 
 }

これで、複数の画像をアップロードする作業が完了しました。それは完璧です。

写真の削除効果を実現するには、最初に 2 枚の写真をアップロードします。単一の画像または複数の画像をアップロードできます。

アップロードが成功したら、現在のページを更新できます。最初からコントローラーに画像プレビューを実装しているため、アップロードした 2 つの画像が表示されるはずです。

削除機能の詳細については説明しませんが、ブラウザで削除する URL を設定するだけで、同じ操作が行われます。

概要

上記は、エディターが紹介した yii2 マルチ画像アップロード コンポーネントの使用方法のチュートリアルです。参考になれば幸いです。皆様、ご質問がございましたら、メッセージを残してください。編集者が時間内に返信させていただきます。スクリプト ハウス Web サイトをサポートしてくださった皆様にも感謝いたします。

#興味があるかもしれない記事:

ユーザー ログイン用の PHP ケース コード php の例

# #ThinkPHP フォームの重複送信を防止する方法の分析例 PHP の例


# PHP ページング表示方法の分析 [PHP 一般的なページング クラス付き php Tips





以上がyii2 マルチイメージ アップロード コンポーネントの使用法チュートリアル PHP の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。