标题看起来很奇怪。让我解释一下。
我有适合 Post 的模型结构。帖子有一个正文列。但我需要在查看两种不同的风格时使用它。
其中之一是降价解析样式。我使用MarkdownNext 包。如果我打电话$post->body->markdown()
,它将处理Markdown::render($post->body)
。同时$post->body
会返回纯文本。
你不能直接在 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);
}
}