Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Laravel Rejestracja - tworzenie unikalnego identyfikatora usera
Forum PHP.pl > Forum > PHP
casperii
Panowie mam pytanie odnośnie zedytowania auth Laravela odnośnie rejestracji.
Obecny kod RegisterController.php

  1. namespace App\Http\Controllers\Auth;
  2.  
  3. use App\{User,Role};
  4. use App\Http\Controllers\Controller;
  5. use Illuminate\Support\Facades\Validator;
  6. use Illuminate\Foundation\Auth\RegistersUsers;
  7.  
  8. class RegisterController extends Controller
  9. {
  10.  
  11. use RegistersUsers;
  12.  
  13. protected $redirectTo = '/admin';
  14.  
  15. public function __construct()
  16. {
  17. $this->middleware('guest');
  18. }
  19.  
  20.  
  21. protected function validator(array $data)
  22. {
  23. return Validator::make($data, [
  24. 'user' => 'required|string|max:255',
  25. 'email' => 'required|string|email|max:255|unique:users',
  26. 'password' => 'required|string|min:6|confirmed',
  27. ]);
  28. }
  29.  
  30.  
  31. protected function create(array $data)
  32. {
  33. $user = User::create([
  34. 'user' => $data['user'],
  35. 'email' => $data['email'],
  36. 'password' => bcrypt($data['password']),
  37. ]);
  38.  
  39. // tu chciałbym dodać id_user = numer generowany
  40. }
  41. }


teraz do tego chciałbym dodać coś takiego w czystym php'ie by wyglądało tak:

  1.  
  2. $jest = false;
  3. do{
  4. $id_user = rand(0, 999999999);
  5. $id_user = str_repeat('0', 9-strlen($id_user)) . $id_user;
  6.  
  7. $result = 'SELECT count(`id_user`) FROM users WHERE id_user = '$id_user '
  8. $sql = mysql_query($result);
  9. $jest=mysql_num_rows($sql)>0;
  10. }
  11. while($jest);


Czy ktoś wie jak to połączyć ze sobą ? smile.gif
Pyton_000
Może zamiast tej dziwnej pętli zastosuj UUIDv4 wtedy będziesz miał na 99% unikalną wartość
casperii
@Pyton_000 dzięki za podpowiedź nie znałem UUIDv4 - jak już wspomniałeś daje nam to 99% - a przy obecnych 23 tyś users procentowość maleje.
Zatem nadal pozostaje kwestia jak sprawdzić czy ów wylosowany ciąg znajduje się w bazie.
Pyton_000
23tyś... dobre sobie wink.gif U nas aktualnie w jednej z tabel jest... 83 456 092 wierszy z unikalnymi UUID i na razię się tym nie przejmuję
casperii
no dobra zastosuję tak jak piszesz ,najwyżej później napiszę , że taki jeden @Pyton_000 na forum mi tak kazał yahoo.gif
Przy okazji nie wiem czy to tak kulturalnie , ale wiesz może jak zrobić w laravelu by "to" wyświetlało się tylko na stronie głównej, jeżeli przeklikam to "to" znika smile.gif

nospor
Tak z czystej ciekawosci, bo musze chyba cos przegapiac:
czemu w twoim cudnym algorytmie losowosci ( wink.gif ) masz
= str_repeat('0', 9-strlen($id_user))
czyli do kazdego wylosowanego usera dodajesz iles tam 0 ktore sa zalezne od wylosowanego id usera a przez to zawsze dla tego id usera beda takie same? Przeciez to juz nie dodaje zadnej unikalnosci
No chyba ze chciales poprostu zawsze miec te sama liczbe cyfr. No ale do tego uzywa sie str_pad() smile.gif
casperii
jeżeli rand wylosował mniej niż 9 cyfr - dopycham reszte zerami.
nospor
To tak jak napisalem
Cytat
No chyba ze chciales poprostu zawsze miec te sama liczbe cyfr. No ale do tego uzywa sie str_pad()
casperii
Jeszcze pytanie takie z innej beczki.

Odnośnie kodu:

  1. protected function create(array $data)
  2. {
  3. // $data['id_user'] = rand(100, 999999999);
  4. $user = User::create([
  5. 'id_user' => 100,
  6. 'user' => $data['user'],
  7. 'email' => $data['email'],
  8. 'password' => bcrypt($data['password']),
  9. //'key' => Str::uuid()->toString(),
  10. ]);
  11.  
  12. return $user;
  13. }



czy do tablicy $data dane muszą tylko z zewnątrz (z pliku blade ) pochodzić ? Ponieważ jak wklepuje w ten (w powyższy) sposób to wyskakuje błąd:
  1. "SQLSTATE[HY000]: General error: 1364 Field 'id_user' doesn't have a default value

viking
Pole jest dodane w modelu protected $fillable = ['id_user'];
casperii
czyli rozumiem, że to co wysyłamy z formularza postem z pliku blade przechodzi przez app\User.php i przekazuje do kontrollera RegisterController ?


Pyton_000
User::create towrzy encję User na danych z tablicy, zapisuje i zwraca obiekt.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.