resham/ nova-dependent-filter
laravel nova 的依赖过滤器
v1.0.0
2023-02-04 22:18 UTC
Requires
- php: >=7.3
This package is not auto-updated.
Last update: 2024-09-17 05:51:01 UTC
README
这是一个用于集成 Laravel Nova 版本 4 的依赖过滤器的包。
要求
安装
使用 composer 安装此包。
composer require resham/nova-dependent-filter
用法
常规用法
安装完成后,您可以通过创建一个过滤器类来使用它。
use Resham\NovaDependentFilter\DependentFilter; class CountryFilter extends DependentFilter { /** * Name of filter. * * @var string */ public $name = 'Country'; /** * The filter's attribute. Also, it is key of filter. * * @var string */ public $key = 'country_code'; /** * Get the filter's available options. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @param array $filters * @return array */ public function options(NovaRequest $request, array $filters = []) { return Country::pluck('name', 'country_code'); } }
依赖用法
让我们假设有一个依赖于国家的依赖过滤器状态,我们可以实现动态依赖过滤器
父过滤器
定义父过滤器(其他过滤器依赖于它)
use Resham\NovaDependentFilter\DependentFilter; class CountryFilter extends DependentFilter { /** * Name of filter. * * @var string */ public $name = 'Country'; /** * The filter's attribute. Also, it is key of filter. * * @var string */ public $key = 'country_code'; /** * The other filters key whose are depends on this filter. * * @var string[] */ public $parentOf = ['state']; /** * Get the filter's available options. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @param array $filters * @return array */ public function options(NovaRequest $request, array $filters = []) { return Country::pluck('name', 'country_code'); } }
注意:不要忘记在
$parentOf
属性上定义子过滤器的键。
子过滤器
让我们定义一个依赖于父过滤器的子过滤器。
use Resham\NovaDependentFilter\DependentFilter; class StateFilter extends DependentFilter { /** * Name of filter. * * @var string */ public $name = 'State'; /** * The filter's attribute. Also, it is key of filter. * * @var string */ public $key = 'state'; /** * Get the filter's available options. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @param array $filters * @return array */ public function options(NovaRequest $request, array $filters = []) { return State::where('country_code', $filters['country_code'] ?? '') ->pluck('name', 'id'); } }
注册过滤器
我们可以像定义 nova 一样注册过滤器。
/** * Get the filters available for the resource. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return array */ public function filters(NovaRequest $request) { return [ new CountryFilter ]; }
此外,您还可以使用 CountryFilter::make()
/** * Get the filters available for the resource. * * @param \Laravel\Nova\Http\Requests\NovaRequest $request * @return array */ public function filters(NovaRequest $request) { return [ CountryFilter::make() ]; }
安全
如果您发现任何问题,请通过电子邮件reshampokhrel57@gmail.com联系。