0

标题看起来很奇怪。让我解释一下。

我有适合 Post 的模型结构。帖子有一个正文列。但我需要在查看两种不同的风格时使用它。

其中之一是降价解析样式。我使用MarkdownNext 包。如果我打电话$post->body->markdown(),它将处理Markdown::render($post->body)。同时$post->body会返回纯文本。

4

1 回答 1

1

你不能直接在 Laravel 中这样做,但你可以使用 PHP 来重现它。

这是未经测试的代码,但应该可以工作。基本上,您创建一个返回 Markdown 类对象的访问器,您只需将主体注入该对象:

class Post extends Eloquent {

    public function getBodyAttribute($originalValue)
    {
        return new Markdown($originalValue);
    }

}

该类将接收主体并将其存储到属性中。每当您的代码尝试$this->body用作字符串时,都会使用魔术方法 __toString,如果您这样做$this->body->markdown(),那么这是一个具有此方法的对象,它将仅使用 MarkdownNext 类呈现主体。

class Markdown {

    public $body;

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

    public function __toString()
    {
        return $this->body;
    }

    public function markdown()
    {
        return MarkdownNext::render($this->body);
    }

}
于 2014-01-09T01:39:54.523 回答