Nova 不仅允许您在特定资源和关系中搜索,您还可以使用位于 Nova 管理面板顶部导航栏中的全局搜索输入框在所有资源中进行全局搜索。
聚焦全局搜索
您可以通过按下键盘上的 /
(正斜杠)来聚焦全局搜索输入框。按下 ESC
(转义键)也会关闭全局搜索输入框。
当资源显示在搜索结果中时,结果将显示资源的“标题”。例如,User
资源可以指定 name
属性作为其标题。然后,当资源显示在全局搜索结果中时,该属性将被显示。
要自定义资源的“标题”属性,您可以在资源类上定义一个 title
属性。
/**
* The single value that should be used to represent the resource when being displayed.
*
* @var string
*/
public static $title = 'name';
或者,您可以覆盖资源的 title
方法。
/**
* Get the value that should be displayed to represent the resource.
*
* @return string
*/
public function title()
{
return $this->name;
}
在搜索结果中显示头像
您还可以通过在资源中添加 头像 字段,在搜索结果中将资源的“头像”显示在标题旁边。
您也可以在全局搜索结果中显示一个较小的“副标题”属性。副标题将直接放置在标题属性下方。在这个截图中,您可以看到 Post
资源的作者显示为副标题,可以快速识别谁写了某个帖子。
要定义资源的副标题,您应该覆盖资源的 subtitle
方法。
/**
* Get the search result subtitle for the resource.
*
* @return string
*/
public function subtitle()
{
return "Author: {$this->user->name}";
}
预加载
如果您的副标题访问相关资源上的信息,您应该考虑将相关资源添加到资源的 预加载数组 中。
您可以通过覆盖资源上的 globalSearchResults
属性来限制通过全局搜索返回给定资源的结果数量。
/**
* The maximum number of results to include when searching globally.
*
* @var int
*/
public static $globalSearchResults = 5;
您可以使用 Nova::globalSearchDebounce
方法配置全局搜索字段的防抖时间。通常,此方法应该从您的应用程序的 NovaServiceProvider
中调用。
Nova::globalSearchDebounce(1); // 1 second
如果您正在构建一个 自定义字段,希望将其用作全局搜索结果的“头像图像”/封面艺术,您的字段应实现 Laravel\Nova\Contracts\Cover
接口。此接口要求您定义一个 resolveThumbnailUrl
方法,该方法应返回您想要的“封面艺术”的 URL
/**
* Resolve the thumbnail URL for the field.
*
* @return string|null
*/
public function resolveThumbnailUrl()
{
return 'https://www.example.com/avatar/'.md5(strtolower($this->value)).'?s=300';
}
默认情况下,所有 Nova 资源都可以在全局范围内搜索;但是,您可以通过覆盖资源上的 globallySearchable
属性,将给定资源从全局搜索中排除
/**
* Indicates if the resource should be globally searchable.
*
* @var bool
*/
public static $globallySearchable = false;
如果您希望完全禁用 Nova 中的全局搜索,可以从您的 App/Providers/NovaServiceProvider
中调用 withoutGlobalSearch
方法
use Laravel\Nova\Nova;
/**
* Boot any application services.
*
* @return void
*/
public function boot()
{
parent::boot();
Nova::withoutGlobalSearch();
}