如何修改fortify CreatesNewUsers.php界面?

How to modify fortify CreatesNewUsers.php interface?

我需要修改/vendor/laravel/fortify/src/Contracts/CreatesNewUsers.php界面 并添加 1 个 bool 参数,因为在应用程序的不同位置使用 CreateNewUser 验证规则不同,比如有些地方密码在创建用户时没有填写,但必须是单独的功能。

所以我复制了文件/project/resources/fortify/CreatesNewUsers.php,内容为:

<?php

namespace Laravel\Fortify\Contracts;

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

并且在app/Actions/Fortify/CreateNewUser.php中我修改了:

<?php

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
//use Laravel\Fortify\Contracts\CreatesNewUsers;
use Resources\Fortify\CreatesNewUsers;  // Reference to my interface
use Laravel\Jetstream\Jetstream;

class CreateNewUser implements CreatesNewUsers
{
    use PasswordValidationRules;
public function create(array $input, bool $makeValidation)
    {
...

但是尝试使用这个 class 我遇到了错误

Interface "Resources\Fortify\CreatesNewUsers" not found

哪种方式有效?

谢谢!

我将界面移动到文件 app/Actions/Fortify/CreatesNewUsers。php :

<?php
namespace App\Actions\Fortify;

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

并修改了app/Actions/Fortify/CreateNewUser.php :

<?php

namespace App\Actions\Fortify;

use App\Models\User;
use Illuminate\Database\QueryException;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;
use DB;

use App\Actions\Fortify\CreatesNewUsers;

use Laravel\Jetstream\Jetstream;
use Spatie\Permission\Models\Permission;

class CreateNewUser implements CreatesNewUsers
{
    use PasswordValidationRules;

    /**
     * Validate and create a newly registered user.
     *
     * @param array $input
     *
     * @return \App\Models\User
     */
    public function create(array $input, bool $make_validation, array $hasPermissions)
    {
        if ($make_validation) {
            $userValidationRulesArray = User::getUserValidationRulesArray(null, '', []);
            if (\App::runningInConsole()) {
                unset($userValidationRulesArray['password_2']);
            }


            $validator = Validator::make($input, $userValidationRulesArray);//->validate();
            if ($validator->fails()) {
                $errorMsg = $validator->getMessageBag();
                if (\App::runningInConsole()) {
                    echo '::$errorMsg::' . print_r($errorMsg, true) . '</pre>';
                }

                return $errorMsg;
            }
        } // if($make_validation) {

        $newUserData = [
            'name'         => $input['name'],
            'email'        => $input['email'],
            'account_type' => $input['account_type'],
            'phone'        => $input['phone'],
            'website'      => $input['website'],
            'notes'        => $input['notes'],
            'first_name'   => $input['first_name'],
            'last_name'    => $input['last_name'],
        ];
        if (isset($input['password'])) {
            $newUserData['password'] = Hash::make($input['password']);
        }
        if (isset($input['status'])) {
            $newUserData['status'] = $input['status'];
        }
        if (isset($input['activated_at'])) {
            $newUserData['activated_at'] = $input['activated_at'];
        }
        if (isset($input['avatar'])) {
            $newUserData['avatar'] = $input['avatar'];
        }

        try {
            DB::beginTransaction();

            $newUser = User::create($newUserData);
            foreach ($hasPermissions as $nextHasPermission) {
                $appAdminPermission = Permission::findByName($nextHasPermission);
                if ($appAdminPermission) {
                    $newUser->givePermissionTo($appAdminPermission);
                }

            }
            DB::commit();
            return $newUser;

        } catch (QueryException $e) {
            DB::rollBack();
            if (\App::runningInConsole()) {
                echo '::$e->getMessage()::' . print_r($e->getMessage(), true) . '</pre>';
            }
        }
        return false;
    }
}

它允许我从应用程序的不同部分使用 CreateNewUser,例如播种机、管理区域、用户注册 具有不同的行为。对我来说,这似乎是使用 fortify 和 CreateNewUser 的好方法...