具有单参数的laravel策略方法如何工作?

具有单参数的laravel策略方法如何工作?,laravel,Laravel,当策略接受主体和对象时,如$user->can'delete',$post,它将调用PostPolicy::delete$user,$post来确定结果,我完全理解了策略是如何工作的 我不知道viewAny或create等方法是如何工作的,也不知道如何测试它们。我不能现在就说$user->can'create',对吗?Laravel的文档有时是一个迷宫,更不用说源代码了,我还没有找到任何关于如何手工测试策略方法的信息,因为它们只接受一个$user参数 编辑:正如答案中指出的,只需传递类名即可。不

当策略接受主体和对象时,如$user->can'delete',$post,它将调用PostPolicy::delete$user,$post来确定结果,我完全理解了策略是如何工作的

我不知道viewAny或create等方法是如何工作的,也不知道如何测试它们。我不能现在就说$user->can'create',对吗?Laravel的文档有时是一个迷宫,更不用说源代码了,我还没有找到任何关于如何手工测试策略方法的信息,因为它们只接受一个$user参数

编辑:正如答案中指出的,只需传递类名即可。不过,它确实有一个问题:它必须是原始类名,而不是使用class_alias创建的别名,这是tinker的常见技巧。请看这里:

>>>class\U alias\App\User::class'U' =>正确 >>>$u->can'viewAny',\App\User::class =>正确 >>>$u->can'viewAny',u::class =>错误
您可以将类名作为第二个参数传递,该参数将确定用于授权的策略。例如,如果要确保使用后策略,可以执行以下操作

$user->can'create',App\Post::class; 从Laravel文档中:

如前所述,某些操作(如创建)可能不需要模型实例。在这些情况下,您应该将类名传递给authorize方法。类名将用于确定授权操作时要使用的策略


我打算回答说我试过了,然后注意到你已经完全限定了类名。显然这很关键。。。正如我将在修改后的帖子中解释的那样。是的,当使用Tinker时,由于缺少使用声明,您必须提供FQCN。