定义好透镜后,就可以将其附加到资源。Nova 生成的每个资源都包含一个 lenses
方法。要将透镜附加到资源,只需将其添加到此方法返回的透镜数组中即可。
/**
* Get the lenses available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [
new Lenses\MostValuableUsers,
];
}
或者,您可以使用 make
方法实例化您的透镜。传递给 make
方法的任何参数都将传递给透镜的构造函数。
/**
* Get the lenses available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [
Lenses\MostValuableUsers::make(),
];
}
如果您只想向特定用户公开给定透镜,您可以在注册透镜时调用 canSee
方法。canSee
方法接受一个闭包,该闭包应返回 true
或 false
。闭包将接收传入的 HTTP 请求。
use App\Models\User;
use Laravel\Nova\Http\Requests\NovaRequest;
/**
* Get the lenses available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [
(new Lenses\MostValuableUsers)->canSee(function ($request) {
return $request->user()->can(
'viewValuableUsers', User::class
);
}),
];
}
在上面的示例中,我们使用 Laravel 的 Authorizable
特征的 can
方法在我们的 User
模型上确定授权用户是否被授权执行 viewValuableUsers
操作。但是,由于代理到授权策略方法是 canSee
的常见用例,您可以使用 canSeeWhen
方法来实现相同的行为。canSeeWhen
方法具有与 Illuminate\Foundation\Auth\Access\Authorizable
特征的 can
方法相同的函数签名。
/**
* Get the lenses available for the resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [
(new Lenses\MostValuableUsers)->canSeeWhen(
'viewValuableUsers', User::class
),
];
}