codezero/laravel-route-key-exists

Laravel 验证规则,用于检查自定义路由键是否存在。

1.1.0 2017-11-06 14:28 UTC

This package is auto-updated.

Last update: 2024-09-11 14:27:00 UTC


README

GitHub release License Build Status Code Coverage Scrutinizer Code Quality Total Downloads

Laravel 验证规则,用于检查自定义路由键是否存在。

Laravel 的 exists 规则会检查数据库表中是否存在具有给定值的列。此验证规则通过在模型上使用 resolveRouteBinding() 方法来检查给定值是否存在。

要求

安装

通过 Composer 需求此包

composer require codezero/laravel-route-key-exists

一些背景信息

Laravel 的 隐式路由模型绑定 允许您通过在控制器中类型提示来自动解析模型。此外,您还可以更改模型中用于查询数据库的路由键

public function getRouteKeyName()
{
    return 'id';
}

当您在模型中使用自定义或计算的路由键时,这也同样适用

public function getRouteKey()
{
    // "encode" the route key
    return "foo-{$this->id}";
}

public function resolveRouteBinding($value)
{
    // "decode" the route key
    $id = (int) str_replace('foo-', '', $value);

    // resolve from the database
    return $this->where('id', $id)->first();
}

但是,如果您在 POST 请求中发送自定义键并希望对其进行验证,则与 Laravel 的 exists 规则不同,此验证规则使用 resolveRouteBinding() 方法来检查键是否有效。

用法

假设您有一个 ID 为 1 的模型,但 getRouteKey() 返回的编码值为 1234

在验证规则中,将您的模型类名传递给 \CodeZero\RouteKeyExists\RouteKeyExists

request()->validate([
    'model_id' => RouteKeyExists::model(Model::class),
]);

在这里,model_id 是编码值,它将通过模型上的 resolveRouteBinding() 方法进行解析。如果不能解析,则验证失败。

可能需要实际 ID 来在验证通过时进行操作。将 replace() 添加到规则中,并将 model_id 更新为实际 ID

request()->validate([
    'model_id' => RouteKeyExists::model(Model::class)->replace(),
]);

$id = request('model_id'); // actual ID

如果您的表单使用与模型或数据库不同的属性名,您可以在处理过程中替换 ID 和属性名。

request()->validate([
    'model' => RouteKeyExists::model(Model::class)->replace('model_id'),
]);

$id = request('model_id'); // actual ID
//$id = request('model'); // null

或者,您可能希望保留请求中的编码 ID,但添加实际 ID。只需将 add() 添加到规则中,并指定一个属性名

request()->validate([
    'model_id' => RouteKeyExists::model(Model::class)->add('actual_id'),
]);

$id = request('actual_id'); // actual ID
$key = request('model_id'); // route key

请注意,动态添加到请求中的属性不会包含在 request()->validate() 返回的数组中。您可以通过 request('attribute_name') 访问这些属性。

有用的包

测试

vendor/bin/phpunit

安全性

如果您发现任何与安全相关的问题,请通过 电子邮件 联系我,而不是使用问题跟踪器。

变更日志

请参阅 变更日志 中的重要更改列表。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件