You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Laravel Fortify的CreatesNewUsers接口报找不到错误如何处理?

问题根源
  • resources目录默认不在Composer的PSR-4自动加载规则内,放在这个目录下的接口文件无法被自动加载识别
  • 你自定义的接口定义的命名空间是Laravel\Fortify\Contracts,但引用时用了Resources\Fortify\CreatesNewUsers,命名空间完全不匹配
  • 直接复用Vendor包的原有命名空间做自定义修改,会导致Fortify本身依赖原接口的逻辑出现冲突
正确实现步骤

1. 移除放在resources目录的自定义接口文件

不要把PHP类/接口文件放在非自动加载目录,也不要直接修改/覆盖Vendor包下的核心文件,避免后续composer更新时被覆盖。

2. 自定义接口放到app目录下

在app/Contracts目录下新建CreatesNewUsers.php,内容如下:

<?php

namespace App\Contracts;

interface CreatesNewUsers
{
    public function create(array $input, bool $makeValidation);
}

3. 修改CreateNewUser实现类

调整引用的接口为你自定义的接口:

<?php

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use App\Contracts\CreatesNewUsers; // 改用自定义接口
use Laravel\Jetstream\Jetstream;

class CreateNewUser implements CreatesNewUsers
{
    use PasswordValidationRules;
    
    public function create(array $input, bool $makeValidation)
    {
        // 业务逻辑示例:根据$makeValidation参数开关验证
        if ($makeValidation) {
            Validator::make($input, [
                'name' => ['required', 'string', 'max:255'],
                'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
                'password' => $this->passwordRules(),
                'terms' => Jetstream::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
            ])->validate();
        }

        return User::create([
            'name' => $input['name'],
            'email' => $input['email'],
            'password' => isset($input['password']) ? Hash::make($input['password']) : null,
        ]);
    }
}

4. 兼容Fortify默认注册流程(可选)

如果还要使用Fortify自带的注册功能,可以在服务提供者里做绑定兼容原有参数:

// 在app/Providers/FortifyServiceProvider.php的register方法中添加
$this->app->bind(\Laravel\Fortify\Contracts\CreatesNewUsers::class, function ($app) {
    return new class implements \Laravel\Fortify\Contracts\CreatesNewUsers {
        public function create(array $input)
        {
            return $app->make(\App\Actions\Fortify\CreateNewUser::class)->create($input, true);
        }
    };
});

配置完成后Fortify默认调用注册逻辑时会自动开启验证,你自己业务场景调用时可以手动传false关闭验证,走独立的密码设置逻辑即可。

5. 刷新自动加载

执行命令确保新的类文件被加载:
composer dump-autoload

内容的提问来源于stack exchange,提问作者mstdmstd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:24:05