lionix / castable-request
Laravel 可铸请求
v1.0.1
2021-01-21 06:10 UTC
Requires
- php: ^7.2.5|^8.0
- laravel/framework: >=6.20.12
Requires (Dev)
- mockery/mockery: ^1.4
- orchestra/testbench: ^4.8
- phpunit/phpunit: ^9.3.3
- squizlabs/php_codesniffer: ^3.5
This package is auto-updated.
Last update: 2024-09-21 13:14:06 UTC
README
此软件包将 Eloquent 模型铸件应用于请求输入。
Laravel SaaS 模板 - Larafast
安装
composer require lionix/castable-request
使用
在你的请求类中实现 Lionix\CastableRequest\Contracts\CastableRequestInterface
。您将需要声明一个 casts
方法,该方法将返回应被转换的属性,就像您使用 Eloquent 属性转换 一样。
namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use Lionix\CastableRequest\Contracts\CastableRequestInterface; class PostsIndexRequest extends FormRequest implements CastableRequestInterface { /** * Get request casts. * * @return array */ public function casts(): array { return [ 'created_after' => 'date', ]; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'created_after' => 'date', ]; } }
此软件包将完成所有魔法,当您访问请求的 created_after
属性时,在这种情况下,它将被转换为一个 Illuminate\Support\Carbon
实例。
namespace App\Http\Controllers; use App\Http\Requests\PostsIndexRequest; class PostsController extends Controller { public function index(PostsIndexRequest $request) { $createdAfterDiff = $request->input('created_after')->diffForHumans(); // Example value: 1 month from now } }
所有默认的 Eloquent 模型铸件都可用。
从 Laravel 7.x 开始,您可以定义自己的 自定义铸件 并在请求中使用它。
全局请求铸件
如果您想声明将在全局范围内应用而无需在每个请求类中定义的铸件,您可以在服务提供程序中使用 Lionix\CastableRequest\Contracts\CastsRegistryInterface
并注册全局铸件。
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Lionix\CastableRequest\Contracts\CastsRegistryInterface; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @param \Lionix\CastableRequest\Contracts\CastsRegistryInterface $castRegistry * * @return void */ public function boot(CastsRegistryInterface $castRegistry) { $castRegistry->register('created_after', 'date'); } }
待办事项
- 为外观和
request
助手添加全局请求铸件支持。