【问题标题】:How to modify fortify CreatesNewUsers.php interface?如何修改 fortify CreatesNewUsers.php 接口?
【发布时间】:2021-11-24 06:03:39
【问题描述】:

我需要修改 /vendor/laravel/fortify/src/Contracts/CreatesNewUsers.php 接口 并添加 1 个布尔参数,如在应用程序的不同位置使用 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)
    {
...

但是尝试使用这个类我得到了错误

Interface "Resources\Fortify\CreatesNewUsers" not found

哪种方式有效?

谢谢!

【问题讨论】:

    标签: laravel laravel-fortify


    【解决方案1】:

    我在 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 的好方法......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2016-12-10
      • 2022-01-15
      • 2018-12-21
      • 2012-05-11
      • 1970-01-01
      相关资源
      最近更新 更多