Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Kohana][Kohana3.3] Auth module, ORM_Validation_Exception [ 0 ]: Failed to validate array
pkielski
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 21.07.2016

Ostrzeżenie: (0%)
-----


Problem w rodzaju - banalna sprawa, wszystko powinno działać, no i nie działa (IMG:style_emoticons/default/smile.gif)

Tworze sobie od nowa portal uzyczam.pl, zaczalem od rejestracji uzytkownikow i tutaj schody, rejestracja pod adresem:
http://uzyczam.pl/rejestracja

Tabele z uzytkownikami standardowe z modulu Auth, jedyna zmiana to w Users pole username to bedzie tak naprawde email
  1. CREATE TABLE IF NOT EXISTS `upl_users` (
  2. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `username` varchar(254) NOT NULL,
  4. `password` varchar(64) NOT NULL,
  5. `logins` int(10) UNSIGNED NOT NULL DEFAULT '0',
  6. `last_login` int(10) UNSIGNED,
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `uniq_email` (`email`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Metoda:
  1. public function action_register()
  2. {
  3. $this->template->title = __('Uzyczam.pl - rejestracja');
  4.  
  5. $error = '';
  6. $success = '';
  7. if(isset($_POST['email']))
  8. {
  9. if(ORM::factory('User')->where('username', '=', $_POST['email'])->count_all()>0)
  10. $error .= __('Użytkownik korzystający z tego emaila istnieje już w bazie. ');
  11.  
  12. if(ORM::factory('City')->where('nazwa', '=', $_POST['city'])->count_all()==0)
  13. $error .= __('Nie znaleziono podanej nazwy miejscowości w bazie. ');
  14.  
  15. if($error == '')
  16. {
  17.  
  18.  
  19. $user = ORM::factory('User');
  20. $user->username = $this->request->post('email');
  21.  
  22. $user->password = $this->request->post('password');
  23.  
  24. $user->save();
  25. #$user->role = $user->id;
  26.  
  27. $success .= __('Zostałeś zarejestrowany, możesz się zalogować.');
  28. }
  29. }
  30.  
  31.  
  32. $this->template->content = View::factory('template/rejestracja');
  33. $this->template->content->error = $error;
  34. $this->template->content->success = $success;
  35. }


ale nawet gdy na sztywno podalem dane to wyskakuje ten sam blad:
  1. $user = ORM::factory('User');
  2. $user->username = 'adfadadfadsf';
  3.  
  4. $user->password = 'qwerqwerqwer';
  5.  
  6. $user->save();
  7. #$user->role = $user->id;



Cytat
ORM_Validation_Exception [ 0 ]: Failed to validate array
MODPATH/orm/classes/Kohana/ORM.php [ 1275 ]
1270
1271 $array = $this->_validation;
1272
1273 if (($this->_valid = $array->check()) === FALSE OR $extra_errors)
1274 {
1275 $exception = new ORM_Validation_Exception($this->errors_filename(), $array);
1276
1277 if ($extra_errors)
1278 {
1279 // Merge any possible errors from the external object
1280 $exception->add_object('_external', $extra_validation);



Mozecie tam pod tym adresem sprobowac sie zarejestrowac i dokladny komunikat sprawdzic. Rece mi juz opadaja, siedze na tym juz 1,5 dnia, nie wiem gdzie lezy blad, probowalem roznie do tego podejsc, ale ciagle to samo (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
daro0
post
Post #2





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

Ostrzeżenie: (0%)
-----


Można też inaczej:

  1. try
  2. {
  3. $user = ORM::factory('User')->create_user($this->request->post(), array(
  4. 'username',
  5. 'password',
  6. 'email'
  7. ));
  8.  
  9. $user->add('roles', ORM::factory('Role', array('name' => 'login')));
  10.  
  11. } catch (ORM_Validation_Exception $e)
  12. {
  13. $errors = $e->errors('models');
  14. }
  15.  


Ważne, w widoku odpowiedzialnym za rejestrację użytkownika muszą być pola tekstowe formularza o nazwach (atrybuty name): username, email, password, oraz password_confirm, więc potrzeba tam te cztery pola, nazwa użytkownika, email (musi być unikatowy), hasło (min. 8 znaków) oraz powtórz hasło, żeby się zgadzały i sądzę że stąd ten błąd.

Natomiast w tym catch odpowiada to za pobieranie informacji o błędach walidacji,

w katalogu /application/messages/models powinien być:

user.php

  1. <?php
  2.  
  3. return array(
  4. 'username' => array(
  5. 'not_empty' => 'Musisz wprowadzić nazwę użytkownika.',
  6. 'min_length' => 'Minimum :param2 znaków.',
  7. 'max_length' => 'Dopuszczalne :param2 znaków.',
  8. 'username_available' => 'Ta nazwa już istnieje.',
  9. 'unique' => 'Użytkownik o takiej nazwie już istnieje w bazie.'
  10. ),
  11. 'email' => array(
  12. 'not_empty' => 'Musisz wprowadzić adres e-mail',
  13. 'min_length' => 'Minimum :param2 znaków.',
  14. 'max_length' => 'Dopuszczalne :param2 znaków.',
  15. 'email' => 'Wprowadź prawidłowy adres',
  16. 'email_available' => 'Ten mail jest już w bazie.',
  17. 'unique' => 'Ten adres e-mail już istnieje w bazie.'
  18. )
  19. );
  20.  


w /application/messages/models/user powinien być:

_external.php

  1. <?php
  2.  
  3. return array(
  4. 'password_confirm' => array(
  5. 'matches' => 'Hasła się nie zgadzają.',
  6. ),
  7. 'password' => array(
  8. 'not_empty' => 'Proszę wprowadzić hasło.',
  9. 'min_length' => 'Hasło musi mieć min. :param2 znaków',
  10. )
  11. );


a to przykładowy fragment widoku do rejestracji:

  1. <input type="text" name="username">
  2. <span class="errormsg"><?php if (isset($errors['username'])) echo $errors['username']; ?></span>
  3. <input type="text" name="email">
  4. <span class="errormsg"><?php if (isset($errors['email'])) echo $errors['email']; ?></span>
  5. <input type="password" name="password">
  6. <span class="errormsg"><?php if (isset($errors['_external']['password'])) echo $errors['_external']['password'];; ?></span>
  7. <input type="password" name="password_confirm">
  8. <span class="errormsg"><?php if (isset($errors['_external']['password_confirm'])) echo $errors['_external']['password_confirm']; ?></span>
  9.  


Schema bazy danych (MySQL) jest tam w module ORM, zakładam że z tego korzystasz.

Napisz czy to zadziała bo sam robiłem już niejedną aplikację w Kohanie (3.2/3.3)
Go to the top of the page
+Quote Post
pkielski
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 21.07.2016

Ostrzeżenie: (0%)
-----


Dzięki kolego za pomoc, przede wszystkim skorzystałem z Twojego rozwiązania z try,catch, przyznam ze wczesniej z tego nie korzystalem (a powinienem), dzieki temu zobaczylem co dokladnie bylo nie tak u mnie, okazalo sie ze troche namieszalem z polami username-email. Pozniej jednak nie dzialalo mi dodawanie Ról, a jest to wymagane do logowania, tez sie z tym troche meczylem - ciagle nie laczylo users z roles, ostatecznie podzialalo polaczenie moich has_many z tymi w Auth_User (tam byly role i tokeny, u mnie dodatkowe pola).

Odnosnie tego co Ty napisales (przynajmniej ja się Tobie tez przydam na przyszlosc), to w widoku nie musisz miec w cale potwierdzenia hasla, ani nawet usera i email, validation tego nie sprawdza, ja mam logowanie tylko z pomoca emaila, bez username i podwojnego hasla.

Dzięki!
Go to the top of the page
+Quote Post
daro0
post
Post #4





Grupa: Zarejestrowani
Postów: 88
Pomógł: 12
Dołączył: 17.09.2014
Skąd: Krasnystaw

Ostrzeżenie: (0%)
-----


To co napisałem dotyczyło rejestracji nowego użytkownika, zaś w logowaniu są dwa (albo trzy) pola: username i password i ewentualnie remember jako checkbox. No i logowanie odbywa się przez sprawdzanie tych wartości, pewnie można zrobić przez e-mail zamiast username (w sumie to łatwe) ale standardowo (a analizowałem kod w modułach Auth) logowanie jest przez username, password.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 18:27