gabelbart / nova-toolbar-tools
为laravel nova添加工具栏工具和资源。
Requires
- php: ^8.0
- ext-json: *
Requires (Dev)
- laravel/nova: ^4.21
- squizlabs/php_codesniffer: ^3.7
Conflicts
- laravel/nova: <4 || >=5
README
php: ^8.0
laravel/nova: ^4.0
(Nova 3版本请见0.5)
Nova 工具栏工具
laravel nova的composer包。它允许您全局选择和持久化资源。
示例用例
- 开发自己的工具栏工具的基础
- 选择您要在某些资源中过滤的模型,但不需要每次都应用过滤器,只需在会话中应用一次
- 根据选择自定义菜单
- 隐藏或显示资源
- 隐藏或显示工具
- 根据全局选择自定义工具行为
- 根据选择自定义菜单
安装
composer require gabelbart/nova-toolbar-tools
将中间件添加到nova配置中
将\Gabelbart\Laravel\Nova\ToolbarTools\Http\Middleware\BootToolbarTools::class
添加到config/nova.php
中的middleware
列表
在您的\App\Providers\NovaServiceProvider
中加载工具
添加此方法
public function toolbarTools()
{
return [
];
}
将这些行添加到boot
方法中
Nova::serving(function () {
\Gabelbart\Laravel\Nova\ToolbarTools\ToolbarTools::toolbarTools($this->toolbarTools());
});
如果您已经有了一个Nova::serving
块,您可能只需要组合内容。
使用方法
工具栏资源
设置工具栏资源
假设您有一个资源\App\Nova\Publisher
,要创建一个工具栏下拉菜单,您需要创建一个\Gabelbart\Laravel\Nova\ToolbarTools\Tools\ToolbarResource
的实例。将以下内容添加到您的NovaServiceProvider
的toolbarTools
方法中
ToolbarResource::make(\App\Nova\Publisher::class)
它可能看起来像这样
public function toolbarTools()
{
return [
ToolbarResource::make(\App\Nova\Publisher::class),
];
}
访问值
在nova的任何地方,您现在都可以使用\Gabelbart\Laravel\Nova\ToolbarTools\Tools\ToolbarResource
的静态sessionValueFor
方法访问值。例如
/** @var ?\App\Models\Publisher $publisher */
$publisher = ToolbarResource::sessionValueFor(\App\Nova\Publisher::class);
此外,您还可以使用\Gabelbart\Laravel\Nova\ToolbarTools\Traits\HasToolbarSelection
特质。这允许您调用资源的getToolbarSelection
和getToolbarSelectionOrFail
静态方法。
class Publisher extends \Laravel\Nova\Resource
{
use \Gabelbart\Laravel\Nova\ToolbarTools\Traits\HasToolbarSelection;
// snip...
}
/** @var ?\App\Models\Publisher $model */
$model = Publisher::getToolbarSelection();
选项
标签
默认情况下,将使用您的nova资源的标签,但这可以自定义
ToolbarResource::make(\App\Nova\Publisher::class)
->withLabel(__('my_own_label'))
可搜索的
默认情况下,将显示所有可能的选项。如果您希望用户进行搜索,可以使用searchable
选项。
ToolbarResource::make(\App\Nova\Publisher::class)
->searchable()
这利用了nova的全局搜索。
可过滤的
默认情况下,将显示所有可能的选项。您可以使用filterable
选项显示一个过滤器字段,以便根据文本输入过滤值。当与searchable
一起使用时,搜索选项将优先。
ToolbarResource::make(\App\Nova\Publisher::class)
->searchable()
选择
默认情况下,将使用会话中的值,如果您将其关闭,您可能希望自己设置所选值。
ToolbarResource::make(\App\Nova\Publisher::class)
->selection(\Auth::user()->favoritePublisher())
排序
要更改项目的顺序,请使用sortBy
选项。它接受三个参数
- key
string|callable|false
- 要排序的属性的名称或回调,传递false
以禁用搜索 - options
array
(默认:null
)- 任何在Collection::sortBy中可用的选项 - descending
bool
(默认:false
)- 设置排序方向
这些参数直接传递到Illuminate\Support\Collection::sortBy
方法,有关更多信息,请参阅那里。
ToolbarResource::make(\App\Nova\Publisher::class)
->orderBy('name', null, false)
无项可寻文本
使用 searchableDropdown
选项,如果没有找到匹配项,组件将显示“没有找到项”。您可以通过使用以下方式来自定义此消息:
ToolbarResource::make(\App\Nova\Publisher::class)
->noItemsFoundText(__('my_no_items_found_text')
保存到会话
默认情况下,选择的值将在会话中记住。如果您想更改这一点,请使用带有 false
作为参数的 saveToSession
方法。您可能希望考虑持久化值并自行提供选择,然后查看 selection
和 onChange
。
ToolbarResource::make(\App\Nova\Publisher::class)
->saveToSession(false)
对选择做出反应
如果您想自定义选择更改的行为,您可以在自定义回调中这样做。请求将有一个名为 id
的参数,其中包含选择的主键。
ToolbarResource::make(\App\Nova\Publisher::class)
->onChange(fn (\Illuminate\Http\Request $request) => \App\Nova\Publisher::onChangeToolbarSelection($request))
操作索引-查询
注意:由于它使用 nova 的全局搜索,此操作将 不 对 searchable
选项有效。
如果您想自定义可用选项的列表,可以使用 withIndexQuery
方法。它接收内部查询构建器作为参数。但是,如果您想替换内部查询构建器,可以返回自己的查询构建器实例。
ToolbarResource::make(\App\Nova\Book::class)
->withIndexQuery(fn (\Illuminate\Database\Eloquent\Builder $builder) => $builder->where('publisher_id', \Auth::user()->id))