Clicky

Skocz do zawartości


Zdjęcie
- - - - -

[K3.0 -> K3.3] Problem z dwoma rodzajami reguł walidacji

2 odpowiedzi w tym temacie

  • Zaloguj się, aby dodać odpowiedź

#1 Tomasz Wrona

Tomasz Wrona

    Początkujący

  • Użytkownik
  • Pip
  • 2 postów

Napisano 21 grudzień 2013 - 00:02

Hej,

ostatnio pisząc nowy projekt, postanowiłem przerzucić się w końcu na wersję 3.3 Kohany. Wszystko szło gładko, aż do tworzenia rejestracji użytkowników. Wtedy to musiałem wykorzystać dwa rodzaje reguł walidacji: "powtórz email" i "zaakceptuj regulamin".

 

Patrząc na dokumentację nowego rules() stworzyłem coś takiego:

<?php defined('SYSPATH') or die('No direct script access.');

class Model_User extends Model_Auth_User
{
	public function rules()
	{
		return array(
			'username' => array(
				array('not_empty'),
				array('max_length', array(':value', 32)),
				array(array($this, 'unique'), array('username', ':value')),
			),
			'password' => array(
				array('not_empty'),
				array('min_length', array(':value', 6)),
			),
			'email' => array(
				array('not_empty'),
				array('email'),
				array(array($this, 'unique'), array('email', ':value')),
			),
			'confirm_email' => array(
				array('matches',  array(':validation', 'confirm_email', 'email')),
			),
			'first_name' => array(
				array('not_empty'),
				array('max_length', array(':value', 100)),
			),
			'last_name' => array(
				array('not_empty'),
				array('max_length', array(':value', 100)),
			),
			'place' => array(
				array('not_empty'),
				array('max_length', array(':value', 255)),
			),
			'birthdate' => array(
				array('not_empty'),
				array('regex', array(':value', '/^[0-9.]{8,10}$/')),
			),
			'terms' => array(
				array('not_empty'),
			),
		);
	}

        // ...
} // End User

Problem polega na tym, że cokolwiek nie wpiszę w polach "email" i "confirm_email", otrzymuję komunikat iż różnią się one od siebie. Podobny problem mam także z checkboxem - czy jest zaznaczony, czy nie: ciągle mam alert o braku wartości.

 

Kawałek formularza:

<?php echo Form::open(); ?>
    <?php echo Form::input('email', isset($post) ? $post['email'] : NULL, array('class' => 'span3 input-big', 'placeholder' => 'Twój adres email')); ?>
    <?php echo Form::input('confirm_email', isset($post) ? $post['confirm_email'] : NULL, array('class' => 'span3 input-big', 'placeholder' => 'Wprowadź ponownie email')); ?>

    <label>
      <?php echo Form::checkbox('terms', 'agree'); ?>&nbsp;Akceptuję <a href="#">regulamin</a> serwisu.
    </label>
<?php echo Form::close(); ?>

Gdyby ktoś miał jakiś pomysł, co źle robię to będę bardzo wdzięczny za sugestię ;)



#2 Tomasz Wrona

Tomasz Wrona

    Początkujący

  • Użytkownik
  • Pip
  • 2 postów

Napisano 22 grudzień 2013 - 15:34

Problem rozwiązany, najwidoczniej od wersji > 3.0.x ORM do walidacji przekazuje tak jakby te obiekty, które są w bazie, więc jeżeli jakiegoś pola w niej nie ma (np. confirm_email czy term) to nie jest on tam przekazywany, albo ma wartość NULL, stąd not_empty czy matches zwracało zawsze false.

 

Rozwiązaniem jest przeniesienie tych reguł, związanymi z "poza-bazowymi" polami do kontrolera, np.:

$extraValidation = Validation::factory($post)
					->rules('email', array(
						array('not_empty'),
						array('min_length', array(':value', 6)),
						array('matches',  array(':validation', 'email', 'confirm_email')),
					))
					->rules('terms', array(
						array('not_empty')
					));

$user->save($extraValidation);


#3 Maciek

Maciek

    Senior Mastah

  • Użytkownik
  • PipPipPip
  • 780 postów

Napisano 22 grudzień 2013 - 15:58

Zawsze warto zacząć od przeczytania dokumentacji.


  • sbl lubi to




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych