Markdown和引入第三方库
打赏作者

chenxin

感觉这个第三方库有的时候还是不能识别一些格式!比如有的代码能识别是代码,有的则不能识别!

chenxin

问一个问题!用markdown语法的时候,正文部分只要markdown一下就可以了,但是用户评论内容是放在foreach里面的,怎么markdown?是先在控制器的方法里面循环markdown然后传给视图还是怎样?

JellyBool 回复 chenxin

评论跟这里面的 Post 都是一样的道理的吧,你可以在 comments 表多加一个字段比如 html_content ,或者在不加字段的时候,直接在输出的时候进行 markdown 转化不就好了么?

chenxin 回复 JellyBool
  $discussion=Discussion::find($id);
  $html=$this->markdown->markdown($discussion->body);
  return view('forum.show',compact('discussion','html'));

这个是传给视图的数据其中在视图中利用elquent的一对多关系得到
{$comment->body}
放在foreach中,按照您说的在输出的时候markdown以下,关键传给视图的是一个collection啊! 不是像正文那样就一个字段!

JellyBool 回复 chenxin

我的意思是这样的,假设我们视图是这样渲染的 :

 @foreach( $discussion->comments as $comment)
     <li>{ App\Markdown\Markdown::makeHtml($comment->body)  }</li>
@endforeach

这个时候,你就需要在 app 目录下创建 Markdown 目录,并在这个目录下创建 Markdown 这个类,定义一个 makeHtml 的方法:

public static function makeHtml($text) {
     return (new HyperDown)->makeHtml($text);
}

思路大概就是这个样子,有一些细节你稍微注意一下就行

chenxin 回复 JellyBool

哦哦!刚刚刷新才看到抱歉多回复一下!看到你这个答复我明白了!我之前很纳闷怎么在视图里面调用markdown方法!现在明白了!谢谢了!

chenxin 回复 JellyBool

哈哈!弄好了!我在控制器里面加了一个循环

        foreach($discussion->comments as $comment){
            $comment->body=$this->markdown->markdown($comment->body);
        }

效果是有了,但是感觉效率不是很高!

JellyBool 回复 chenxin

恩,所以说,你可以为 comment 也加一个字段,比如 html_content ,这样的方案就是会多一份数据,但是可以直接输出,所以,这个看你的选择

chenxin 回复 JellyBool

我刚才发现一个问题用markdown语法的时候如果代码里面包含了html中{}这个符号,那么显示评论的板块直接消失不见了!

liudong0763

老师 ,其实 {!! !!} 这个符号和 { } 是有什么区别的?

JellyBool 回复 liudong0763

前者是不转义,后者是转义的,基础教程系列就有说到

chinkiver

有没有支持MarkDown画流程图的三方插件?

JellyBool 回复 chinkiver

这个我没有发现。。。

Mrwangjian

能否支持markdown编辑实时预览功能的呢,站长

JellyBool 回复 Mrwangjian

你是说laravist的评论?

MarksGui888

里面有不属于markdown语法的特殊符号,就会从特殊符号位置断开,停止解析。所以小伙伴们注意了啊

JellyBool 回复 MarksGui888

从特殊符号位置断开,停止解析 这个具体的表现是?

MarksGui888 回复 JellyBool

只解析到特殊符号位置,剩下的就直接过滤了。无内容

MarksGui888

另外,Parser类为什么不在Posts里面直接使用了,何必还要重新定义一个Markdown类?这有点没理解

JellyBool 回复 MarksGui888

1.Markdown 单负责markdown 转换
2.你可以自定义方法,或者直接在 Markdown 类扩展 Parse
3.Posts 脱离 package 的依赖

MarksGui888 回复 JellyBool

非常感谢,思路明朗多了

a359611223

按照步骤 展示的body部分反而变成了原样的html代码 像这样

Eloquent ORM

定义模型

开始之前,让我们先来创建一个 Eloquent 模型。模型通常放在 app 目录中,不过你可以将他们随意放在任何可通过 composer.json 自动加载的地方。所有的 Eloquent 模型都继承自 IlluminateDatabaseEloquentModel 类。

创建模型实例的最简单方法是使用 make:model Artisan 命令:

php artisan make:model User 

当你生成一个模型时想要顺便生成一个 数据库迁移,可以使用 --migration 或 -m 选项:

php artisan make:model User --migration php artisan make:model User --m 

Eloquent 模型约定

现在,让我们来看一个 Flight 模型类的例子,我们将会用它从 flights 数据表中取回与保存信息:

blaze0207

請問一下,我按照教學做到創建 Markdown 這個類資料夾,並在底下創建 Parser.phpMarkdown.php,可是當我在 Markdown.php 底下去注入依賴 Parser,卻都一直無法注入,請問原因有可能是為什麼呢?

JellyBool 回复 blaze0207

具体的代码可以看看么:?

blaze0207

Parser.php 這檔案就是按照您教學的去複製貼上而已!

Markdown.php 的程式碼如下:

namespace App\Markdown;

class Markdown
{
    protected $parser;

    public function __construct(Parser $parser)
    {
        $this->parser = $parser;
    }

    public function markdown($text)
    {
        $html = $this->parser->makeHtml($text);
        return $html;
    }
}
  1. 我是用 VScode 開發,我有安裝套件 php-css-fixer,當我 save 變更就會自動刪除未用到的宣告

  2. 當我在 __construct 依賴注入 Parser 的時候,我在一開始有寫 use App\Markdowm\Parser;
    但一儲存變更就被刪掉,我以為是套件雞婆幫我刪錯,後來我把套件刪掉.

  3. 即使套件刪掉,自己在上面寫了 use App\Markdowm\Parser; 還是無法在網頁解析 Markdowm 的格式,會變成顯示 tag 的形式,如下圖:
    錯誤顯示

  4. 所以感覺起來就是沒有完整的注入 Parser,導致無法解析 Markdown 格式的內容!

但是我反覆看了好幾遍此篇教學視頻,實在是看不出哪裡做錯,可能要麻煩大大指點一下了!
我是用 laravel 5.2 版本

JellyBool 回复 blaze0207

在文章输出的时候,使用 {!! 这样的 blade 标签

blaze0207 回复 JellyBool

感謝大大,正常顯示 Markdowm 格式了XD

pracitcemp

早期版本不太清楚,laravel5.5默认自带parsedown这个markdown扩展包了

JellyBool 回复 pracitcemp

早期版本没有的

wongvio
{!! Parsedown::instance()->setMarkupEscaped(true)->text($discussion->body) !!}

献给5.5以后版本的各位老哥,本章教程结束~