logo

注册镜头

定义好镜头后,就可以将其附加到资源上了。Nova 生成的每个资源都包含一个 lenses 方法。要将镜头附加到资源,只需将其添加到此方法返回的 lenses 数组中即可:

php
/**
 * 获取资源可用的镜头。
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @return array
 */
public function lenses(NovaRequest $request)
{
    return [
        new Lenses\MostValuableUsers,
    ];
}

或者,你也可以使用 make 方法来实例化你的镜头。传递给 make 方法的任何参数都将传递给镜头的构造函数:

php
/**
 * 获取资源可用的镜头。
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @return array
 */
public function lenses(NovaRequest $request)
{
    return [
        Lenses\MostValuableUsers::make(),
    ];
}

授权

如果您想只向特定用户公开某个镜头,可以在注册镜头时调用 canSee 方法。canSee 方法接受一个闭包,该闭包应返回 truefalse。闭包将接收传入的 HTTP 请求:

php
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 方法具有相同的方法签名:

php
/**
 * 获取资源可用的镜头。
 *
 * @param  \Laravel\Nova\Http\Requests\NovaRequest  $request
 * @return array
 */
public function lenses(NovaRequest $request)
{
    return [
        (new Lenses\MostValuableUsers)->canSeeWhen(
            'viewValuableUsers', User::class
        ),
    ];
}