注:閱讀本文需要了解模型表單的自定義工具及laravel-admin擴充套件開發;本文的擴充套件包是基於peinhu的AetherUpload-laravel大檔案上傳包的一個整合方案。
1,生成擴充套件包骨架:
php artisan admin:extend laravel-admin-ext/large-file-upload --namespace=Encore\\LargeFileUpload
2,composer.json的配置修改不再贅述,移除不必要的檔案目錄,並新建LargeFileField.php檔案,精簡後如圖
說明:assets
資料夾存放需要釋出的靜態檔案js,css等等views
目錄存放需要用到的blade模板檢視檔案src
目錄存放具體的邏輯檔案
3,修改LargeFileUpload.php
<?php
namespace Encore\LargeFileUpload;
use Encore\Admin\Extension;
class LargeFileUpload extends Extension
{
//副檔名稱
public $name = 'large-file-upload';
//擴充套件檢視目錄
public $views = __DIR__.'/../resources/views';
//擴充套件靜態檔案目錄
public $assets = __DIR__.'/../resources/assets';
}
4,我們把需要用的js或css指令碼放到assets目錄下,將檢視放到views目錄下,如圖:
5,修改LargeFileUploadServiceProvider.php
public function boot(LargeFileUpload $extension)
{
if (! LargeFileUpload::boot()) {
return ;
}
//靜態檔案的釋出目錄
if ($this->app->runningInConsole() && $assets = $extension->assets()) {
$this->publishes(
[$assets => public_path('vendor/laravel-admin-ext/large-file-upload')],
'large-file-upload'
);
}
//配置檢視的名稱空間
if ($views = $extension->views()) {
$this->loadViewsFrom($views, 'large-file-field');
}
//配置laravel-admin啟動時載入擴充套件包裡的靜態檔案
Admin::booting(function (){
Admin::js('vendor/laravel-admin-ext/large-file-upload/js/aetherupload.admin.js');
Admin::js('vendor/laravel-admin-ext/large-file-upload/js/bootstrap.file-input.js');
Admin::js('vendor/laravel-admin-ext/large-file-upload/js/spark-md5.min.js');
});
}
6,修改LargeFileField.php檔案
<?php
namespace Encore\LargeFileUpload;
use Encore\Admin\Form\Field;
class LargeFileField extends Field
{
/*
* 此處的large-file-field即為上一步中設定的檢視的名稱空間
* 直接可以呼叫resource目錄下的views目錄中的large_file_upload.blade.php檔案
*/
public $view = 'large-file-field::large_file_upload';
public function render()
{
$name = $this->formatName($this->column);
$this->script = <<<SRC
$('#{$name}-file').bootstrapFileInput();
$('#{$name}-file').change(function(){
aetherupload('{$name}', this, 'file').success(getPath).upload('{$name}');
});
SRC;
return parent::render();
}
}
7,本地載入擴充套件包,在需要安裝該擴充套件包的專案根目錄的composer.json檔案中(注意不是擴充套件包目錄),加入如下程式碼:
"repositories": [
{
"type": "path",
"url": "app/Admin/extensions/laravel-admin-ext/large-file-upload"
}
]
8,本地安裝併發布靜態資源
composer require laravel-admin-ext/large-file-upload
php artisan vendor:publish --tag=large-file-upload
9, 註冊進laravel-admin,在app/Admin/bootstrap.php中新增以下程式碼:(當然你可以起其他的名字)
Encore\Admin\Form::extend('largefile', \Encore\LargeFileUpload\LargeFileField::class);
10, 在控制器中呼叫:
$form->largefile('ColumnName', 'LabelName');
效果如圖:
11,上傳github併發布Packagist,就可以隨時使用,不必每次都複製黏貼程式碼了。
總結:本文其實是對於laravel-admin文件中自定義工具開發和擴充套件開發的一個小整合,由於aetherupload專案對於laravel-admin並不友好,所以針對性的對於js指令碼和檢視邏輯進行了優化,完成了這個小擴充套件包。希望大家有開發出比較實用的擴充套件,也能貢獻出來,為開源事業做貢獻。
專案地址:https://github.com/Dianwoung/large-file-upload