Как изменить укрепление CreatesNewUsers.php интерфейс?

#laravel #laravel-fortify

Вопрос:

Мне нужно изменить /vendor/laravel/fortify/src/Contracts/CreatesNewUsers.php интерфейс и добавить еще 1 параметр bool, так как при использовании createNewUser в разных местах правила проверки приложений разные, скажем, в некоторых местах пароль не заполняется при создании пользователя, но должен быть отдельной функцией.

Поэтому я скопировал файл /project/resources/fortify/CreatesNewUsers.php с содержанием :

 lt;?php  namespace LaravelFortifyContracts;  interface CreatesNewUsers {  public function create(array $input, bool $makeValidation); }  

и в app/Actions/Fortify/CreateNewUser.php Я изменил :

 lt;?php  namespace AppActionsFortify;  use AppModelsUser; use IlluminateSupportFacadesHash; use IlluminateSupportFacadesValidator; //use LaravelFortifyContractsCreatesNewUsers; use ResourcesFortifyCreatesNewUsers; // Reference to my interface use LaravelJetstreamJetstream;  class CreateNewUser implements CreatesNewUsers {  use PasswordValidationRules; public function create(array $input, bool $makeValidation)  { ...  

Но при попытке использовать этот класс я получил ошибку

 Interface "ResourcesFortifyCreatesNewUsers" not found  

Какой путь является правильным ?

Спасибо!

Ответ №1:

Я переместил интерфейс в файл app/Actions/Fortify/CreatesNewUsers.php :

 lt;?php namespace AppActionsFortify;  interface CreatesNewUsers {  public function create(array $input, bool $make_validation, array $hasPermissions); }  

и модифицированный app/Actions/Fortify/CreateNewUser.php :

 lt;?php  namespace AppActionsFortify;  use AppModelsUser; use IlluminateDatabaseQueryException; use IlluminateSupportFacadesHash; use IlluminateSupportFacadesValidator; use DB;  use AppActionsFortifyCreatesNewUsers;  use LaravelJetstreamJetstream; use SpatiePermissionModelsPermission;  class CreateNewUser implements CreatesNewUsers {  use PasswordValidationRules;   /**  * Validate and create a newly registered user.  *  * @param array $input  *  * @return AppModelsUser  */  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);//-gt;validate();  if ($validator-gt;fails()) {  $errorMsg = $validator-gt;getMessageBag();  if (App::runningInConsole()) {  echo '::$errorMsg::' . print_r($errorMsg, true) . 'lt;/pregt;';  }   return $errorMsg;  }  } // if($make_validation) {   $newUserData = [  'name' =gt; $input['name'],  'email' =gt; $input['email'],  'account_type' =gt; $input['account_type'],  'phone' =gt; $input['phone'],  'website' =gt; $input['website'],  'notes' =gt; $input['notes'],  'first_name' =gt; $input['first_name'],  'last_name' =gt; $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-gt;givePermissionTo($appAdminPermission);  }   }  DB::commit();  return $newUser;   } catch (QueryException $e) {  DB::rollBack();  if (App::runningInConsole()) {  echo '::$e-gt;getMessage()::' . print_r($e-gt;getMessage(), true) . 'lt;/pregt;';  }  }  return false;  } }  

Это позволяет мне использовать createNewUser из разных частей приложения, таких как сеялки, область администрирования, регистрация пользователей с различным поведением. Для меня это кажется хорошим способом использования fortify и createNewUser…