定义好透镜后,就可以将其附加到资源。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
),
];
}