Laravel的Sub mutator

时间:2014-01-09 00:46:29

标签: php laravel laravel-4 eloquent mutators

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

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

其中一个降价解析风格。我使用MarkdownNext package。如果我致电$post->body->markdown(),它将处理Markdown::render($post->body)。同时$post->body将返回纯文本。

1 个答案:

答案 0 :(得分: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);
    }

}