您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

CreateNewUser.php 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace App\Actions\FilamentCompanies;
  3. use App\Models\Company;
  4. use App\Models\User;
  5. use Illuminate\Support\Facades\DB;
  6. use Illuminate\Support\Facades\Hash;
  7. use Illuminate\Support\Facades\Validator;
  8. use Wallo\FilamentCompanies\Contracts\CreatesNewUsers;
  9. use Wallo\FilamentCompanies\FilamentCompanies;
  10. class CreateNewUser implements CreatesNewUsers
  11. {
  12. /**
  13. * Create a newly registered user.
  14. *
  15. * @param array<string, string> $input
  16. */
  17. public function create(array $input): User
  18. {
  19. Validator::make($input, [
  20. 'name' => ['required', 'string', 'max:255'],
  21. 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
  22. 'password' => ['required', 'string', 'min:8', 'confirmed'],
  23. 'terms' => FilamentCompanies::hasTermsAndPrivacyPolicyFeature() ? ['accepted', 'required'] : '',
  24. ])->validate();
  25. return DB::transaction(function () use ($input) {
  26. return tap(User::create([
  27. 'name' => $input['name'],
  28. 'email' => $input['email'],
  29. 'password' => Hash::make($input['password']),
  30. ]), function (User $user) {
  31. $this->createCompany($user);
  32. });
  33. });
  34. }
  35. /**
  36. * Create a personal company for the user.
  37. */
  38. protected function createCompany(User $user): void
  39. {
  40. $user->ownedCompanies()->save(Company::forceCreate([
  41. 'user_id' => $user->id,
  42. 'name' => explode(' ', $user->name, 2)[0] . "'s Company",
  43. 'personal_company' => true,
  44. ]));
  45. }
  46. }