当你在 Eloquent 模型实例中获取或设置某些属性值的时候,访问器和修改器允许你对 Eloquent 属性值进行格式化。例如,你可能需要使用 Laravel 加密器来加密保存在数据库中的值,而在使用 Eloquent 模型访问该属性的时候自动进行解密其值。
或者,当通过 Eloquent 模型访问存储在数据库的 JSON 字符串时,你可能希望将其转换为数组。
访问器会在访问一个模型的属性时转换 Eloquent 值。要定义访问器,请在模型中创建一个受保护的「驼峰式」方法来表示可访问属性。此方法名称对应到真正的底层模型 属性/数据库字段
的表示。
现在使用访问器来修改之前解析 Markdown 内容的逻辑,ArticlesController
控制器中的 show
方法和 getDetailBySlug
方法都有如下一行代码:
$article->content = $parsedown->parse($article->content);
上面代码实现将文章详情 Markdown 格式的内容转换为 HTML 格式的内容,这样的实现方式不太好,需要写重复的逻辑,可以使用模型访问器实现。
添加访问器:
修改文章模型,在里面添加一个访问器,获取 Markdown 内容转化后的内容。
app/Models/Article.php
.
.
.
class Article extends Model
{
.
.
.
protected function parseContent(): Attribute
{
$parsedown = new Parsedown();
return Attribute::make(
get: fn () => $parsedown->parse($this->content),
);
}
}
修改控制器
修改ArticlesController
控制器中的 show
方法和 getDetailBySlug
方法,下面这行:
$article->content = $parsedown->parse($article->content);
修改视图
在 resource/views/articles/show.blade.php
中找到下面这行:
{!! $article->content !!}
修改为:
{!! $article->parse_content !!}