[PHP] Cakephp rejestracja na stronie w popupie


(Dudus1989) #1

Witam,

właśnie zacząłem uczyć się Cakephp. I mam problem. Potrzebuje stworzyć logowanie/rejestracje z każdej strony serwisu (u góry mam w linki do popupów zaloguj się i zarejestruj się).

Więc tak stworzyłem model user i kontroler UsersController. Walidację pól do modelu przechowuję w modelu w zmiennej $validate. Zrobiłem ajaxową funkcję, która zwraca do mojego popupu czy jakaś wartość jest zła czy nie. Ale problem tkwi w tym, że nawet jak sobie ajaxem prześlę wiadomość, że np dany użytkownik istnieje to po submitowaniu formularza cake próbuje tworzyć użytkownika. Jak temu zapobiec?

Ogólnie kroki wygladają tak:

  1. Znajdujemy się w kontrolerze index w akcji indeks co ładnie renderuje stronę główną.

  2. Klikamy u góry w link zarejestruj się

  3. Wyskakuje box popupowy z rejestracją

  4. Wpisujemy dane

4.a jeżeli nie wpisalismy czegoś to ajaxowo zostaje przesłany komunikat, że nie wpisaliśmy danych (wszystkie reguły walidacji działają)

i teraz:

4b. wpisaliśmy wszystko okej i użytkownika nie ma w bazie to go dodaje i jest wszystko super.

4c. wpisaliśmy np tą samą nazwę użytkownika która już istnieje w bazie (ajaxowo wyświetli mi się "użytkownik znajduje się w bazie") co jest błędem.

  1. Zatwierdzamy coś z błędem i wtedy próbuje tworzyć takiego samego użytkownika a w bazie username jest unique co powoduje błąd.

Pytania:

Czy można jakoś przed samym zapisem w kontrolerze zwalidować dane jeszcze raz?

Czy można jakoś zrobić tak, że jeżeli ajaxem zwracam jakiś błąd do danego pola to przycisk potwierdzenia formularza zostanie zdezaktywowany?

Ogólnie jakby mi ktoś to wytłumaczył jak to działa było by super bo w sumie działam po omacku (kod to różne tutoriale z neta oczywiście poprzerabiane na moje potrzeby)

Więc tak:

model user.php

http://wklej.org/id/1086127/

kontroler UsersController

http://wklej.org/id/1086129/

tutaj jeszcze kod popupu

http://wklej.org/id/1086132/

Mam nadzieję, że to wszystko.

Z góry dziękuje za informację!