我想在 Voyager 的 User 类上添加一些修改器,但我不会更改 vendor 文件夹内的任何内容,并且 Voyages 在包内使用 User 模型。我有可能以某种方式改变这一点吗?
2 回答
很简单。将默认的 Laravel User 模型修改为
<?php
namespace App\Models;
use TCG\Voyager\Models\User as VoyagerUser;
class User extends VoyagerUser {
// add custom mutators and other code in here
}
然后你可以app/config/voyager.php
像@aimme 所说的那样更新并将它作为
'user' => [
'add_default_role_on_register' => true,
'default_role' => 'user',
'admin_permission' => 'browse_admin',
'namespace' => App\User::class,
],
通过这种方式,您可以将 Voyager 用户模型的强大功能引入您自己,而无需涉及任何黑客行为。
在大多数情况下,扩展供应商包都可以正常工作。
更新航海者配置
看config/voyager.php
像这样更改用户数组。我只namespace
在此处进行了更改,来自 voyager 用户 tp App\User。
'user' => [
'add_default_role_on_register' => true,
'default_role' => 'user',
'admin_permission' => 'browse_admin',
'namespace' => App\User::class,
],
但要带来额外的变化,您可以尝试以下方式。
将整个 voyager 包加载为本地包。
警告:执行此操作后,该软件包将不再是供应商软件包。
要做到这一点
1 - 在项目的根目录上创建一个包文件夹。
2 - 将 tcg/voyager repo 克隆到 packages 文件夹或将 vendor tcg 文件夹剪切到您创建的 packages 文件夹中。所以你会有这样的目录yourproject/packages/tcg/voyager
。如果您在 composer.json 中需要 tcg/voyager,请将其从那里删除。
3 - 更新项目根目录上的 composer.json 文件。添加TCG\\Voyager
自动加载。请参见下面的示例,在 psr-4 中添加了该行。
"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"TCG\\Voyager\\": "packages/tcg/voyager/src/"
}
},
4 - 运行作曲家更新
有时您可能必须在composer dump-autoload
对包进行更改后执行此操作。