glhd/laravel-prismoquent

Prismoquent 允许您使用与在 Eloquent 中相同的方法访问 Prismic.io。

0.5.1 2019-05-09 19:42 UTC

This package is auto-updated.

Last update: 2024-09-10 07:04:01 UTC


README

CircleCI Build Status Code Coverage Status Stable version on Packagist Dev version on Packagist Code Style Status License

此包提供了一个与 Eloquent 兼容性较好的 Model,您可以使用它来访问 Prismic.io 的内容,就像它是标准的 Eloquent 模型一样。

App/Page.php

class Page extends \Galahad\Prismoquent\Model
{
	// Automatically inferred from class name ("page") if left unset
	protected $type;
	
	// Cast RichText to text or HTML (all other cast types also supported)
	protected $casts = [
		'title' => 'text',
		'body' => 'html',
	];
	
	// Resolve links as though they were relationships
	public function authorLinkResolver() : ?Person
	{
		return $this->hasOne('author', Person::class);
	}
	
	// Also supports repeating groups of links
	public function similarPagesLinkResolver()
	{
		return $this->hasMany('similar_pages.page', static::class);
	}
}

App/Http/Controllers/PageController.php

class PageController extend Controller
{
	public function show(Page $page)
	{
		return view('page.show', compact('page'));
	}
}

resources/views/page/show.blade.php

<h1>{{ $page->title }}</h1>

<div class="page-body">
	{{ $page->body }}
</div>
// Familiar API
$page = Page::where('document.id', 'W2N5Dx8AAD1TPaYt')->first();
$page = Page::find('W2N5Dx8AAD1TPaYt');
$page = Page::findOrFail('W2N5Dx8AAD1TPaYt');

echo "<h1>{$page->title}</h1>";
echo $page->body;

echo "<p>Written by {$page->author->name}</p>"
echo "<h2>Similar Pages</h2>";

foreach ($page->similar_pages as $similar_page) {
	echo "<h3>{$similar_page->title}</h3>";
	echo "<p>{$similar_page->meta_description}</p>";
}

// With full support for all Prismic predicates
Page::where('my.page.body', 'fulltext', 'laravel')->get();

警告:活跃开发

此项目仍在积极开发中,可能存在许多错误。请自行承担风险!

安装

您可以通过 composer 安装此包

composer require glhd/laravel-prismoquent

使用方法

请参阅上面的基本示例。更多详情即将推出。

配置

在您的 services.php 文件中查找配置

return [
	'prismic' => [
		'endpoint' => env('PRISMIC_ENDPOINT'), // Required
		'api_token' => env('PRISMIC_API_TOKEN'), // Optional, depending on your Prismic permissions
		'webhook_secret' => env('PRISMIC_WEBHOOK_SECRET'), // Optional, if you're using build-in controller
		'register_controller' => false, // Set to false to disable Webhook controller
    ]
];

链接解析

您可以将链接解析器注册为可调用函数或路由名称

// In your AppServiceProvider
Prismic::registerResolver('page', 'pages.show');
Prismic::registerResolver('person', function(DocumentLink $link) {
	return url('/people/'.$link->getUid());
});

// In your web.php route file
Route::get('/pages/{page}', 'PageController@show')->name('pages.show');

如果您未设置解析器,Prismoquent 将尝试使用您的文档的资源路由。因此,Page 将尝试 route('pages.show', $uid)NewsItem 将尝试 route('news_items.show', $uid)

一旦您的解析器定义完成,您就可以在任意 Prismic 片段中使用以下方法解析链接

$html = Prismic::asHtml($fragment);

Blade 指令

{{-- Will render slice object using views/slices/slice-type.blade.php --}}
@slice($object_implementing_slice_tnterface)

{{-- Will render all slices in slice zone using @slice directive --}}
@slice($slice_zone_object)

{{-- Converts frament to HTML using link resolver --}}
@asHtml($fragment)

{{-- Converts frament to plain text --}}
@asText($fragment)

{{-- Converts a DocumentLink fragment to the resolved URL --}}
@resolveLink($documentLink)

许可协议

MIT 许可协议 (MIT)。请参阅 许可文件 获取更多信息。