Help us understand the problem. What is going on with this article?

(PHP)Laravelでマークダウンに対応させてみる

More than 3 years have passed since last update.

はじめに

プログラミングの初心者ですが、面白いと思った機能を自分なりの形でアウトプットしていこうと思っています。よろしくお願いします。

今回のメインはマークダウンです。そのため、その他の機能(投稿機能など)の説明に関しては省かせていただきます。

マークダウンとは

wikiやQuiitaのように、見出しやリストなどに対応し、見やすい投稿記事が作成できる機能です。

大雑把な説明ですが、知っていて損はないと思います。
それでは早速やっていきましょう!!

マークダウンに対応する

まず、何もせず投稿するとどうなるのかを見て見ましょう。
スクリーンショット 2017-07-04 19.47.17.png
この内容で投稿してみます。

スクリーンショット 2017-07-04 19.47.57.png
マークダウンにはなっておらず、そのまま表示されしまっています。

マークダウンライブラリを導入!!

マークダウンのライブラリはたくさん存在します。今回は、私が使った中で一番やりやすかった「cebe/markdown」を使用します。

①composerでインストールする

$ composer require cebe/markdown

②パースをする

cebe/markdown」の使い方を見てみると、

github.com/cebe/markdownより
$parser = new \cebe\markdown\Markdown();
echo $parser->parse($markdown);

と書かれているので、これをお手本にしてパースを実装していきましょう。
モデル(Weicomeモデル)に投稿文(body)をパースするためのparse()メソッドを追加します。

useでインポートして

app/Welcome.php
use cebe\markdown\Markdown as Markdown; 追加

class Welcome extends Model
{

parse()メソッドを追加します。

app/Welcome.php
public function parse() {
        //newでインスタンスを作る
        $parser = new Markdown();
        //bodyをパースする
        return $parser->parse($this->body);
    }

さらにテンプレートからモデルの属性値として取得できるようにしておきます。
以下のようにすることでmark_bodyとするだけでマークダウンに対応した投稿文を取得できるようになります。

app/Welcome.php
public function getMarkBodyAttribute() {
        return $this->parse();
    }

投稿詳細画面のテンプレートの該当箇所を変更します。

resources/views/welcome/show.blade.php(修正前)
@extends('layouts.app')

@section('content')
<h1 class="text-muted">{{ $tweet->title }}</h1>
<div class="text-muted">
    {{ $tweet->body }}
</div>
@endsection
resources/views/welcome/show.blade.php(修正後)
@extends('layouts.app')

@section('content')
<h1 class="text-muted">{{ $tweet->title }}</h1>
<div class="text-muted">
    {!! $tweet->mark_body !!} ←ここ!!
</div>
@endsection

{!! !!}でHTMLをそのまま表示するようにしています。

プラウザで確認して見ましょう!!

スクリーンショット 2017-07-04 22.09.58.png

マークダウンになっています!!完成です!!

反省点

モデルをtweetにするなど、見る側がわかりやすい名前をつければよかったと思いました。
次からは、よりわかりやすい投稿を心がけます。

ソースコード

githubにアップしてありますので、参考になればと思います。
https://github.com/mk2taiga/markdown_app

zakimiiiii
Backendエンジニア。 勉強好きなので、勉強したことをアウトプットしようと思っているけどできていない。。。 Androidも昔やってました。 twitter:@zakimiiiii github: https://github.com/mk2taiga
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away