定义好镜头后,就可以将其附加到资源上了。Nova 生成的每个资源都包含一个 lenses 方法。要将镜头附加到资源,只需将其添加到此方法返回的 lenses 数组中即可:
/**
* 获取资源可用的镜头。
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [
new Lenses\MostValuableUsers,
];
}或者,你也可以使用 make 方法来实例化你的镜头。传递给 make 方法的任何参数都将传递给镜头的构造函数:
/**
* 获取资源可用的镜头。
*
* @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;
/**
* 获取资源可用的镜头。
*
* @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 trait 的 can 方法具有相同的方法签名:
/**
* 获取资源可用的镜头。
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @return array
*/
public function lenses(NovaRequest $request)
{
return [
(new Lenses\MostValuableUsers)->canSeeWhen(
'viewValuableUsers', User::class
),
];
}