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ù)覽圖
- 可以看出
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);
}
}
顯示效果
原文鏈接 https://www.bear777.com/blog/laravel-wangeditor
github地址 https://github.com/pandoraxm/laravel-admin-wangeditor