Laravel之评论系统(三)之支持Markdown

用Laravel框架开发一个简单的评论系统

image description

Laravel之评论系统(三)之支持Markdown

上一篇,我们提到过,评论支持Markdown语法,所以我们的后端需要做一些处理,而不是直接存入数据库中。

  1. 首先先创建对应的model文件,使用命令php artisan make:model Comment,创建完成后,修改其内容如下:

    namespace App\Models;

    use Markdown;
    use Auth;
    use Illuminate\Database\Eloquent\Model;
    use Illuminate\Database\Eloquent\SoftDeletes;

    class Comment extends Model
    {
        use SoftDeletes;
    
        protected $table = 'comments';
        protected $primaryKey ='id';
        protected $dates = ['deleted_at'];
        protected $fillable = [
        'content','commentable_id','user_id','commentable_type','is_reply_author','reply_author_name'
        ];

        //与文章表的多对一关系
        public function article()
        {
            return $this->belongsTo('App\Models\Article','commentable_id','id');
        }

        //与用户表的多对一关系
        public function user()
        {
            return $this->belongsTo('App\User','user_id','id');
        }
        
        //与点赞表的一对多关系
        public function thumbs(){
            return $this->hasMany('App\Models\CommentThumb','comment_id','id');
        }

        //下面几个方法,主要是用于对数据库字段的处理
        public function setIsReplyAuthor($value){
            $this->attributes['is_reply_author'] = $value;
        }

        public function setReplyAuthorName($value){
            $this->attributes['reply_author_name'] = $value;
        }

        public function setContentAttribute($value)
        {
            $to_html = Markdown::convertToHtml($value);
            $reply_author = $this->is_reply_author;
            $auth_user_url = auth_user_url($this->reply_author_name);
        
            //判断当前的评论内容是否是回复他人评论的评论,
            if(!empty($reply_author)){
                //需要给回复人添加一个可以跳转的a链接
                $to_html = preg_replace('/'.$reply_author.'/i','<a href="'.$auth_user_url.'">'.$reply_author.' </a>',$to_html);
            }

            $data = [
                'raw'  => $value,
                'html' => $to_html,
            ];

            $this->attributes['content'] = json_encode($data,320);
        }
    }

因其用到Markdown,所以需要先添加对应的Markdown扩展,此处推荐使用composer安装,命令composer require graham-campbell/markdown "^7.1",此扩展最新版本因为需要PHP>7.0,所以此处只安装7.1版本的或者根据自己的开发环境进行选择。

文中涉及到的多态关系模型,其对应model文件中的内容分别为:

Article表(文章表):


    public function comments(){
        return $this->hasMany('App\Models\Comment','commentable_id','id');
    }

User表(用户表):


    public function comments(){
        return $this->hasMany('App\Models\Comment','user_id','id')->orderBy('created_at', 'desc');
    }

CommentThumb表(点赞表):


    public function comment()
    {
        return $this->belongsTo('App\Models\Comment','comment_id','id');
    }

OK,到此,关于评论提交部分,已经全部完成,下一篇,我们讲跟回复相关的功能。

END