laravel中使用WangEditor及多圖上傳

1. 創(chuàng)建項(xiàng)目及安裝所需安裝包

1.1 創(chuàng)建項(xiàng)目

composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist

1.2 創(chuàng)建數(shù)據(jù)庫(kù)及配置文件

vim .env

1.3 安裝中文包

composer require "caouecs/laravel-lang:~3.0"

安裝之后將語(yǔ)言包移動(dòng)到對(duì)應(yīng)位置就好了馆匿,語(yǔ)言包默認(rèn)位置是resources/lang

cp -a vendor/caouecs/laravel-lang/src/zh-CN resources/lang

修改config/app.php將local的值改為zh-CN

1.4 安裝laravel-admin

composer 安裝

composer require encore/laravel-admin "1.3.*"

config/app.php加入ServiceProvider:

Encore\Admin\Providers\AdminServiceProvider::class

發(fā)布資源

php artisan vendor:publish --tag=laravel-admin

安裝

php artisan admin:install

1.5 快速生成前端登錄注冊(cè)模塊

php artisan make:auth

執(zhí)行遷移

php artisan migrate

2. 快速生成文章管理

2.1 創(chuàng)建遷移表

php artisan make:migration create_posts_table --create=posts

2.2 修改遷移表database/2018_01_14_191442_create_posts_table.php

    public function up()
    {
        Schema::create('posts', function (Blueprint $table) {
            $table->increments('id');
            $table->text('title');
            $table->text('subtitle');
            $table->text('cover');
            $table->enum('type', ['0', '1', '2', '3', '4', '5', '9'])->default('0');
            $table->text('content');
            $table->timestamps();
        });
    }

2.3 執(zhí)行遷移

php artisan migrate

2.4 創(chuàng)建模型和控制器

模型

php artisan make:model App\\Models\\Post

控制器

php artisan admin:make PostController --model=App\\Models\\Post

2.5 新增文章后臺(tái)路由

Admin/routes.php

$router->resource('/post', 'PostController');

2.6 修改app/Admin/PostController.php里面的form和grid兩個(gè)方法

    protected function grid()
    {
        return Admin::grid(Post::class, function (Grid $grid) {

            $grid->id('ID')->sortable();
            $grid->title('標(biāo)題');
            $grid->subtitle('副標(biāo)題');
            $grid->type('類(lèi)型')->options([
                '0' => 'php',
                '1' => 'laravel',
                '2' => 'javascript',
                '3' => 'python',
                '4' => 'golang',
                '5' => 'linux',
                '9' => 'other'
            ]);
             $grid->cover('封面')->image('/uploads', 100, 100);
            $grid->content('內(nèi)容')->limit(100);
            $grid->created_at('創(chuàng)建時(shí)間');
            $grid->updated_at('修改時(shí)間');
        });
    }

    protected function form()
    {
        return Admin::form(Post::class, function (Form $form) {

            $form->display('id', 'ID');
            $form->text('title', '標(biāo)題');
            $form->textarea('subtitle', '副標(biāo)題')->rows(3);
            $form->select('type', '類(lèi)型')->options([
                '0' => 'php',
                '1' => 'laravel',
                '2' => 'javascript',
                '3' => 'python',
                '4' => 'golang',
                '5' => 'linux',
                '9' => 'other'
            ]);
            $form->image('cover', '封面');
            $form->editor('content', '內(nèi)容');
            $form->display('created_at', '創(chuàng)建時(shí)間');
            $form->display('updated_at', '修改時(shí)間');
        });
    }

3. 集成WangEditor編輯器

3.1 移除已有組件

修改app/Admin/bootstrap.php

<?php

use Encore\Admin\Form;

Form::forget('map');
Form::forget('editor');

// or

Form::forget(['map', 'editor']);

3.2 集成富文本編輯器wangEditor

先下載前端庫(kù)文件wangEditor橄仍,解壓到目錄public/vendor/wangEditor-3.0.9达布。

然后新建組件類(lèi)app/Admin/Extensions/WangEditor.php忽刽。
關(guān)于WangEditor設(shè)置部分請(qǐng)閱讀官方文檔

<?php

namespace App\Admin\Extensions;

use Encore\Admin\Form\Field;

class WangEditor extends Field
{
    protected $view = 'admin.wang-editor';

    protected static $css = [
        '/vendor/wangEditor-3.0.9/release/wangEditor.min.css',
    ];

    protected static $js = [
        '/vendor/wangEditor-3.0.9/release/wangEditor.min.js',
    ];

    public function render()
    {
        $name = $this->formatName($this->column);

        $this->script = <<<EOT

var E = window.wangEditor
var editor = new E('#{$this->id}');
editor.customConfig.uploadFileName = 'mypic[]';
editor.customConfig.uploadImgHeaders = {
    'X-CSRF-TOKEN': $('input[name="_token"]').val()
}
editor.customConfig.zIndex = 0;
// 上傳路徑
editor.customConfig.uploadImgServer = '/uploadFile';
editor.customConfig.onchange = function (html) {
    $('input[name=$name]').val(html);
}
editor.customConfig.uploadImgHooks = {
    customInsert: function (insertImg, result, editor) {
        if (typeof(result.length) != "undefined") {
            for (var i = 0; i <= result.length - 1; i++) {
                var j = i;
                var url = result[i].newFileName;
                insertImg(url);
            }
            toastr.success(result[j]['info']);
        }

        switch (result['ResultData']) {
            case 6:
                toastr.error("最多可以上傳4張圖片");
                break;
            case 5:
                toastr.error("請(qǐng)選擇一個(gè)文件");
                break;
            case 4:
                toastr.error("上傳失敗");
                break;
            case 3:
                toastr.error(result['info']);
                break;
            case 2:
                toastr.error("文件類(lèi)型不合法");
                break;
            case 1:
                toastr.error(result['info']);
                break;
        }
    }
}
editor.create();

// var editor = new wangEditor('{$this->id}');
//     editor.create();

EOT;
        return parent::render();

    }
}

新建視圖文件resources/views/admin/wang-editor.blade.php

<div class="form-group {!! !$errors->has($label) ?: 'has-error' !!}">

    <label for="{{$id}}" class="col-sm-2 control-label">{{$label}}</label>

    <div class="col-sm-{{$width['field']}}">

        @include('admin::form.error')

        <div id="{{$id}}" style="width: 100%; height: 100%;">
            <p>{!! old($column, $value) !!}</p>
        </div>

        <input type="hidden" name="{{$name}}" value="{{ old($column, $value) }}" />

    </div>
</div>

然后注冊(cè)進(jìn)laravel-admin,在app/Admin/bootstrap.php中添加以下代碼:

<?php

use App\Admin\Extensions\WangEditor;
use Encore\Admin\Form;

Form::extend('editor', WangEditor::class);

調(diào)用:

$form->editor('body');

3.3 完成WangEditor圖片上傳

3.3.1 創(chuàng)建上傳路由routes/web.php

Route::post('/uploadFile', 'UploadsController@uploadImg');

3.3.2 創(chuàng)建上傳文件控制器UploadsController

php artisan make:controller UploadsController

修改app\Controllers\UploadsController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UploadsController extends Controller
{
    public function uploadImg(Request $request)
    {
        $file = $request->file("mypic");
        // dd($file);
        if (!empty($file)) {
            foreach ($file as $key => $value) {
                $len = $key;
            }
            if ($len > 25) {
                return response()->json(['ResultData' => 6, 'info' => '最多可以上傳25張圖片']);
            }
            $m = 0;
            $k = 0;
            for ($i = 0; $i <= $len; $i++) {
                // $n 表示第幾張圖片
                $n = $i + 1;
                if ($file[$i]->isValid()) {
                    if (in_array(strtolower($file[$i]->extension()), ['jpeg', 'jpg', 'gif', 'gpeg', 'png'])) {
                        $picname = $file[$i]->getClientOriginalName();//獲取上傳原文件名
                        $ext = $file[$i]->getClientOriginalExtension();//獲取上傳文件的后綴名
                        // 重命名
                        $filename = time() . str_random(6) . "." . $ext;
                        if ($file[$i]->move("uploads/images", $filename)) {
                            $newFileName = '/' . "uploads/images" . '/' . $filename;
                            $m = $m + 1;
                            // return response()->json(['ResultData' => 0, 'info' => '上傳成功', 'newFileName' => $newFileName ]);

                        } else {
                            $k = $k + 1;
                            // return response()->json(['ResultData' => 4, 'info' => '上傳失敗']);
                        }
                        $msg = $m . "張圖片上傳成功 " . $k . "張圖片上傳失敗<br>";
                        $return[] = ['ResultData' => 0, 'info' => $msg, 'newFileName' => $newFileName];
                    } else {
                        return response()->json(['ResultData' => 3, 'info' => '第' . $n . '張圖片后綴名不合法!<br/>' . '只支持jpeg/jpg/png/gif格式']);
                    }
                } else {
                    return response()->json(['ResultData' => 1, 'info' => '第' . $n . '張圖片超過(guò)最大限制!<br/>' . '圖片最大支持2M']);
                }
            }

        } else {
            return response()->json(['ResultData' => 5, 'info' => '請(qǐng)選擇文件']);
        }
        return $return;
    }
}

3.3.3 修改config/admin.php upload里面的host

    'upload'  => [

        'disk' => 'admin',

        'directory'  => [
            'image'  => 'image',
            'file'   => 'file',
        ],
        // 將upload改為uploads
        'host' => 'http://localhost:8000/uploads/',
    ],

預(yù)覽圖


圖1
  • 可以看出WangEditor上傳多圖是沒(méi)有問(wèn)題的
    可是有時(shí)候我們想給文章配多個(gè)封面圖怎么辦焙蹭?
    下面我們就來(lái)完成旁振,laravel-admin的多圖上傳杂伟。

4. laravel-admin 多圖上傳

4.1 修改app/Admin/PostController里面的form()方法

$form->image('cover', '封面');
修改為$form->multipleImage('cover', '封面');

4.2 創(chuàng)建圖片修改器

laravel修改器使用說(shuō)明祭芦,請(qǐng)閱讀相關(guān)說(shuō)明文檔
app/Models/Post.php里增加setCoverAttribute()
setCoverAttribute兩個(gè)方法

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function setCoverAttribute($cover)
    {
        if (is_array($cover)) {
            $this->attributes['cover'] = json_encode($cover);
        }
    }

    public function getCoverAttribute($cover)
    {
        return json_decode($cover, true);
    }
}

顯示效果


圖2

原文鏈接 https://www.bear777.com/blog/laravel-wangeditor

github地址 https://github.com/pandoraxm/laravel-admin-wangeditor

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末筷笨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子龟劲,更是在濱河造成了極大的恐慌胃夏,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件昌跌,死亡現(xiàn)場(chǎng)離奇詭異仰禀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蚕愤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)答恶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)饺蚊,“玉大人,你說(shuō)我怎么就攤上這事悬嗓∥酆簦” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵包竹,是天一觀(guān)的道長(zhǎng)燕酷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)周瞎,這世上最難降的妖魔是什么苗缩? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮堰氓,結(jié)果婚禮上挤渐,老公的妹妹穿的比我還像新娘。我一直安慰自己双絮,他們只是感情好浴麻,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著囤攀,像睡著了一般软免。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上焚挠,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天膏萧,我揣著相機(jī)與錄音,去河邊找鬼蝌衔。 笑死榛泛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的噩斟。 我是一名探鬼主播曹锨,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剃允!你這毒婦竟也來(lái)了沛简?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斥废,失蹤者是張志新(化名)和其女友劉穎椒楣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體牡肉,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捧灰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了统锤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凤壁。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吩屹,死狀恐怖跪另,靈堂內(nèi)的尸體忽然破棺而出拧抖,到底是詐尸還是另有隱情,我是刑警寧澤免绿,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布唧席,位于F島的核電站,受9級(jí)特大地震影響嘲驾,放射性物質(zhì)發(fā)生泄漏淌哟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一辽故、第九天 我趴在偏房一處隱蔽的房頂上張望徒仓。 院中可真熱鬧,春花似錦誊垢、人聲如沸掉弛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)殃饿。三九已至,卻和暖如春芋肠,著一層夾襖步出監(jiān)牢的瞬間乎芳,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工帖池, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奈惑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓睡汹,卻偏偏與公主長(zhǎng)得像肴甸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帮孔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容