【问题标题】:laravel authorization ability check too few argumentslaravel 授权能力检查参数太少
【发布时间】:2019-12-21 17:18:56
【问题描述】:

刀片:

@can('see_similar', $similar, $in_pair)
...
@endcan

类 AuthServiceProvider 扩展了 ServiceProvider:

public function boot()
{
    $this->registerPolicies();
    Gate::define('see_similar', function ($user, $similar, $in_pair) {
        return count($similar) > 0 && (isset($in_pair)) && $in_pair !== 'in_pair';
    });
}

它给了我这个错误:

函数 App\Providers\AuthServiceProvider::App\Providers{closure}() 的参数太少,在 /var/www/html/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate 中传递了 2 个。 php 在第 452 行,预计正好 3 个(查看:/var/www/html/resources/views/daters.blade.php)

例如,如果我只传递一个参数“...function($user, $similar)”,它就可以工作。我试图传递一个参数数组,没有用。

请解释一下如何传递多个参数。

【问题讨论】:

    标签: php laravel laravel-blade


    【解决方案1】:

    来自文档:

    门总是接收一个用户实例作为他们的第一个参数,并且可以 可选地接收其他参数,例如相关的 Eloquent 型号

    您的问题是您将 3 个参数传递给闭包函数,您需要删除一个。

    public function boot()
    {
        $this->registerPolicies();
        // Here you MUST pass at most 2 parameters
        Gate::define('see_similar', function ($user, $ELOQUENT_MODEL) {
            return $what_you_want; // A boolean value
        });
    }
    

    【讨论】:

    • 根据文档没有办法
    • 你能传递一个对象作为第二个参数吗?该对象可以包含任意数量的集合/变量。
    • @party-ring 会尝试
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2020-07-30
    相关资源
    最近更新 更多