resham/nova-dependent-filter

laravel nova 的依赖过滤器

v1.0.0 2023-02-04 22:18 UTC

This package is not auto-updated.

Last update: 2024-09-17 05:51:01 UTC


README

Latest Stable Version License Total Downloads

这是一个用于集成 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联系。

参考