composer create-project laravel/laravel=5.3 blog_wangeditor --prefer-dist
vim .env
composer require "caouecs/laravel-lang:~3.0"
安裝以後將語言包移動到對應位置就行了,語言包默認位置是resources/lang
javascript
cp -a vendor/caouecs/laravel-lang/src/zh-CN resources/lang
修改config/app.php
將local的值改成zh-CN
php
laravel-admin
composer 安裝css
composer require encore/laravel-admin "1.3.*"
在config/app.php
加入ServiceProvider:
html
Encore\Admin\Providers\AdminServiceProvider::class
發佈資源前端
php artisan vendor:publish --tag=laravel-admin
安裝java
php artisan admin:install
php artisan make:auth
執行遷移python
php artisan migrate
php artisan make:migration create_posts_table --create=posts
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(); }); }
php artisan migrate
模型linux
php artisan make:model App\\Models\\Post
控制器nginx
php artisan admin:make PostController --model=App\\Models\\Post
Admin/routes.php $router->resource('/post', 'PostController');
app/Admin/PostController.php
裏面的form和grid兩個方法protected function grid() { return Admin::grid(Post::class, function (Grid $grid) { $grid->id('ID')->sortable(); $grid->title('標題'); $grid->subtitle('副標題'); $grid->type('類型')->options([ '0' => 'php', '1' => 'laravel', '2' => 'javascript', '3' => 'python', '4' => 'golang', '5' => 'linux', '9' => 'other' ]); $grid->cover('封面')->image('/uploads', 100, 100); $grid->content('內容')->limit(100); $grid->created_at('建立時間'); $grid->updated_at('修改時間'); }); } protected function form() { return Admin::form(Post::class, function (Form $form) { $form->display('id', 'ID'); $form->text('title', '標題'); $form->textarea('subtitle', '副標題')->rows(3); $form->select('type', '類型')->options([ '0' => 'php', '1' => 'laravel', '2' => 'javascript', '3' => 'python', '4' => 'golang', '5' => 'linux', '9' => 'other' ]); $form->image('cover', '封面'); $form->editor('content', '內容'); $form->display('created_at', '建立時間'); $form->display('updated_at', '修改時間'); }); }
WangEditor
編輯器修改app/Admin/bootstrap.php
laravel
<?php use Encore\Admin\Form; Form::forget('map'); Form::forget('editor'); // or Form::forget(['map', 'editor']);
先下載前端庫文件wangEditor,解壓到目錄public/vendor/wangEditor-3.0.9
。
而後新建組件類app/Admin/Extensions/WangEditor.php
。 關於WangEditor
設置部分請閱讀官方文檔
<?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("請選擇一個文件"); break; case 4: toastr.error("上傳失敗"); break; case 3: toastr.error(result['info']); break; case 2: toastr.error("文件類型不合法"); 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> 而後註冊進laravel-admin,在app/Admin/bootstrap.php中添加如下代碼: <?php use App\Admin\Extensions\WangEditor; use Encore\Admin\Form; Form::extend('editor', WangEditor::class); 調用: $form->editor('body');
WangEditor
圖片上傳routes/web.php
Route::post('/uploadFile', 'UploadsController@uploadImg');
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 . '張圖片超過最大限制!<br/>' . '圖片最大支持2M']); } } } else { return response()->json(['ResultData' => 5, 'info' => '請選擇文件']); } return $return; } }
config/admin.php
upload裏面的host
'upload' => [ 'disk' => 'admin', 'directory' => [ 'image' => 'image', 'file' => 'file', ], // 將upload改成uploads 'host' => 'http://localhost:8000/uploads/', ],
預覽圖
WangEditor
上傳多圖是沒有問題的 但是有時候咱們想給文章配多個封面圖怎麼辦? 下面咱們就來完成,laravel-admin
的多圖上傳。app/Admin/PostController
裏面的form()
方法將$form->image('cover', '封面');
修改成$form->multipleImage('cover', '封面');
laravel修改器使用說明,請閱讀相關說明文檔 在app/Models/Post.php
裏增長setCoverAttribute()
和setCoverAttribute
兩個方法
<?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