logo

注册透镜

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

php
/**
 * 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 方法的任何参数都将传递给透镜的构造函数。

php
/**
 * 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 方法接受一个闭包,该闭包应返回 truefalse。闭包将接收传入的 HTTP 请求。

php
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 方法相同的函数签名。

php
/**
 * 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
        ),
    ];
}