以防万一有人像我一样更改了 App 文件夹名称,您可以使用以下代码:
Gate::guessPolicyNamesUsing(function ($modelClass) {
$classDirnameArray = explode('\\', str_replace('/', '\\', dirname(str_replace('\\', '/', $modelClass))));
if ($classDirnameArray[0] === app()::APP_FOLDER) {
$classDirnameArray = array_slice($classDirnameArray, 1);
}
return app()::APP_FOLDER.'\\Policies\\'. implode("\\",$classDirnameArray) . "\\" . class_basename ( $modelClass).'Policy';
});
请记住,您可能已经更改了 Application.php 文件中的应用程序名称路径,所以我所做的是创建一个APP_FOLDER
包含应用程序文件夹名称字符串的常量变量,我可以在任何我使用的地方调用它app()::APP_FOLDER
。
IE 如果您有模型MyApp\Models\Core\User
,则猜测策略名称将是MyApp\Policies\Models\Core\User
.
如有任何问题,请随时向我询问,我希望这也能有所帮助。
PS:我PHP v7.2.9
用过Laravel v5.8.37