我在Laravel项目中安装了spatie/yaml-front-matter包来访问HTML文件中的元数据。不幸的是,我无法按日期对文件进行排序,因为元数据中的date属性返回空值。我的操作系统是Microsoft Windows 10 Pro Version 10.0.19042 Build 19042。我使用Laravel版本9和PHP版本8.0。
这里是元数据的副本,它出现在HTML文件的顶部。
---
title: My Fifth Post
slug: my-fifth-post
excerpt: Lorem Ipsum is simply dummy text of the printing and typesetting industry.
date: 2022-01-25
---
下面是我的Models目录中的POST类的副本。
namespace App\Models;
use Illuminate\Support\Facades\File;
use Spatie\YamlFrontMatter\YamlFrontMatter;
class Post
{
public $title;
public $excerpt;
public $date;
public $body;
public $slug;
public function __construct($title, $excerpt, $date, $body, $slug)
{
$this->title = $title;
$this->excerpt = $excerpt;
$this->date - $date;
$this->body = $body;
$this->slug = $slug;
}
public static function all()
{
return collect(File::files(resource_path("posts")))
->map(fn($file) => YamlFrontMatter::parseFile($file))
->map(fn($document) => new Post(
$document->title,
$document->excerpt,
$document->date,
$document->body(),
$document->slug
));
}
public static function find($slug)
{
return static::all()->firstWhere('slug', $slug);
}
}
最后是var_dump(Post::find('my-fifth-post'))的截图。
1条答案
按热度按时间5jvtdoz21#
你应该继承Laravel的默认模型:
类Post扩展Model。之后,你可以使用Laravel的模型方法,强制转换等等。你已经发现,模型中的所有方法都不理想。如果您愿意,可以使用存储库模式。Laravel,Eloquent使用活动记录,所以你不必设置所有的$title $slug等。Laravel做这一切