Laravel5.4 框架与 Laravel-admin 集成 Markdown 编辑器

发布时间:2021-07-24 08:23:58 阅读:1150次

https://learnku.com/articles/20990

https://www.codercto.com/a/12153.html

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Post;
use App\Markdown\Markdown;

class ArticleController extends Controller
{
    protected $markdown;
    public function __construct(Markdown $markdown)
    {
       $this->markdown = $markdown;
    }

    public function index()
    {
    	$data = Post::paginate(5);
    	return view('home.article.index', compact('data'));
    }

    public function show($id)
    {
    	$data = Post::find($id);
        $data->content = $this->markdown->markdown($data->content);
    	return view('home.article.list', compact('data'));
    }
}

Simplemde 是一个优秀简洁的 Markdown 编辑器,如果 laravel-admin 自带的基于 ckeditor 的编辑器组件使用上有问题,可以通过下面的步骤可以集成它,并覆盖掉 ckeditor:

1.4.1 先下载前端库文件 Simplemde
先下载前端库文件 Simplemde, 解压到目录 public/packages/admin/simplemde

1.4.2 新建组件类
然后新建组件类 app/Admin/Extensions/Simplemde.php

<?php

namespace App\Admin\Extensions;

use Encore\Admin\Form\Field;

class Simplemde extends Field
{
protected $view = 'admin::form.editor';

protected static $css = [
'/packages/admin/simplemde/dist/simplemde.min.css',
];

protected static $js = [
'/packages/admin/simplemde/dist/simplemde.min.js',
];

public function render()
{
$this->script = <<<EOT

var simplemde = new SimpleMDE({
autofocus: true,
autosave: {
enabled: true,
delay: 5000,
unique_id: "editor01",
},
spellChecker: false,
});

EOT;
return parent::render();

}
}
1.4.3 注册
然后注册进 laravel-admin, 在 app/Admin/bootstrap.php 中添加以下代码:

<?php

/**
* Laravel-admin - admin builder based on Laravel.
* @author z-song <https://github.com/z-song>
*
* Bootstraper for Admin.
*
* Here you can remove builtin form field:
* Encore\Admin\Form::forget(['map', 'editor']);
*
* Or extend custom form field:
* Encore\Admin\Form::extend('php', PHPEditor::class);
*
* Or require js and css assets:
* Admin::css('/packages/prettydocs/css/styles.css');
* Admin::js('/packages/prettydocs/js/main.js');
*
*/

// Encore\Admin\Form::forget(['map', 'editor']);

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

Form::extend('editor', Simplemde::class);
1.4.4 使用
// 这样就可以使用我们上边自定义的Simplemde Markdown编辑器了
$form->editor('content');
完整文件

/**
* Make a form builder.
*
* @return Form
*/
protected function form()
{
return Admin::form(Article::class, function (Form $form) {

$form->display('id', 'ID');
$form->text('title', '标题')->rules('required|min:3');
$form->text('subtitle', '副标题');

$form->text('user_id', '作者ID')->default(4);
$form->text('slug', 'Slug')->default('My-blog-4');
$form->text('category_id', '分类ID')->default(1);
$form->text('order', '排序')->default(1);
$form->radio('is_excellent', '是否精华')->options(['F' => '否', 'T' => '是'])->default('T');

// 图片路径为upload/images/
$form->image('page_image', '上传文章背景图')->move('images', function($file){

// 自定义文件名,时间戳+五个随机字符串+用户ID
$file_name = date("Ymd") . str_random(6);
return $file_name . "." . $file->guessExtension();
});

$form->datetime('published_at', '发布作品时间')->format('YYYY-MM-DD HH:mm:ss');

$form->display('created_at', trans('admin::lang.created_at'));
$form->display('updated_at', trans('admin::lang.updated_at'));

// 自定义的编辑器
$form->editor('content')->rules('required|min:3');
});
}
2.Markdown 解析类
segmentfault 的 Markdown 解析类:SegmentFault/HyperDown

Laravel 引入第三方类文件,我们在 app 目录下新建一个路径,app/Markdown, 并将下载的类文件 Parser.php 放在该目录下,然后再新建一个文件,引用该类,这样做的好处就是可以完全分离核心类文件,如同合约 contacts 一样,如果以后我们的解析类变了,我们只需对核心类做改变,而其他应用的方法不需要再修改。

markdown.php 引用 parse.php 类:

<?php

namespace App\Markdown;

/**
* Class Markdown
*
* @package \App\Markdown
*/
class Markdown
{
protected $parser;

/**
* Markdown constructor.
*
* @param $parser
*/
public function __construct(Parser $parser)
{
$this->parser = $parser;
}

public function markdown($text)
{
$html = $this->parser->makeHtml($text);

return $html;
}

}
在引用第三方类后,需要执行下面命令进行自动加载:

composer dump-autoload
使用方法:

<?php

protected $markdown;
public function __construct(Markdown $markdown)
{
$this->markdown = $markdown;
}

// 解析Markdown 内容
$this->markdown->markdown($article->content);


如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询
上一篇:phpstudy composer
下一篇:PHP 面向对象

转载请注明:Laravel5.4 框架与 Laravel-admin 集成 Markdown 编辑器 出自老鄢博客 | 欢迎分享