robindrost / prismic-integration-field-laravel
一个允许您将模型或模型集合转换为Prismic集成字段数组的包。
1.3
2021-03-14 18:26 UTC
Requires
- php: ^7.1 || ^8.0
- illuminate/support: ^7.0 || ^8.0
Requires (Dev)
- phpunit/phpunit: ~9.0
This package is auto-updated.
Last update: 2024-09-15 02:16:57 UTC
README
本包允许您使用Eloquent模型作为Prismic集成字段。您必须实现一个接口并有一个选项在您的模型上使用该特性。
该包还提供了一个中间件,用于验证来自Prismic的访问令牌。
安装
composer require robindrost/prismic-integration-field-laravel
用法
您可以通过两种方式在模型上使用集成字段的实现。
- 您指定集成字段所需的数据库中的字段。
- 或定义属性访问器方法,如
getImageUrlAttribute()
。
模型实现示例
请注意,这里我只是将选项1和2混合使用,仅作为示例。
use RobinDrost\PrismicIntegrationField\IntegrationField;
use RobinDrost\PrismicIntegrationField\Contracts\IntegrationField as IntegrationFieldContract;
class MyModel extends Model implements ModelToIntegrationField
{
// Using existing database fields
public $fillable = [
'id',
'title',
'description',
];
// Using a getter method
public function getImageUrlAttribute()
{
return 'https://via.placeholder.com/350x150';
}
// Convert this model to an integration field.
public function toIntegrationField() : IntegrationFieldContract
{
IntegrationField::create()
->setId($this->id)
->setTitle($this->title)
->setDescription($this->description)
->setImageUrl($this->image_url)
->setUpdatedAt($this->updated_at->timestamp)
->setBlob([
'id' => $this->id,
]);
}
}
集合实现
// Override Laravels newCollectiom method:
class MyModel extends Model implements ModelToIntegrationField
{
...
public function newCollection(array $models)
{
return new IntegrationFieldCollection($models);
}
}
// Usage in your controller:
class MyController extends Controller
{
public function myApiMethodCallback()
{
$models = MyModel::paginate(50);
return response()->json([
'results_size' => $models->total(),
'results' => $models->getCollection()->toArray(),
]);
}
}
就这么多。现在Prismic可以处理您的集合返回的数组。
处理访问令牌
该包还提供了一个简单的方式来保护带有访问令牌的路由。Prismic允许您为每个集成字段定义访问令牌。这些访问令牌需要在配置文件中定义,并由本包提供的中间件使用。
- 首先将配置文件发布到您的配置文件夹。
php artisan vendor:publish
并选择此包的服务提供者。
- 现在在添加的配置文件中添加访问令牌。这只是一个字符串数组。
在您的路由上应用中间件
- 将中间件添加到app/Http/Kernel.php
protected $routeMiddleware = [
....
'prismic.verify.access.token' => \RobinDrost\PrismicIntegrationField\Http\Middleware\VerifyAccessToken::class,
];
- 在api路由上应用中间件
Route::middleware('prismic.verify.access.token')->get('/your-path', 'YourController@index');
现在只有允许的访问令牌才能到达控制器。