Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Kohana walidacja, Regex
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Witam, z dokumentacji wiem że regex w walidacji w Kohanie to zwykły preg_match. Nie znalazłem funkcji w rule do porównywania wartości z pola i wartości np. z configu (matches porównuje 2 pola ale już z poza nie). Toteż zrobiłem regexem metodę, która powinna śmigać (porównanie pola z wartością z configu)

  1.  
  2. $post = Validation::factory($_POST)
  3. ->rule("password", "not_empty")
  4. ->rule("password", "regex", array("/^".$config["password"]."$/"));
  5.  


Jednak interpreter krzyczy że Missing argument 2 for Kohana_Valid::regex(). Jaki błąd popełniłem?

Pozdrawiam


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
sabat24
post
Post #2





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

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


W kohanie 3.2+ nie dałeś pierwszego parametru, którym w tym wypadku powinno być :value, czyli pseudo-zmienna zawierająca wartość pola. Reguła powinna ogólnie wyglądać tak:
  1. ->rule('password', 'regex', array(':value', "Twoje_wyrazenie_regularne"))

Chociaż moim zdaniem lepiej byłoby zastosować własną funkcję albo użyć metody in_array.
Go to the top of the page
+Quote Post
MateuszS
post
Post #3





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Właśnie, a jak do tej własnej funkcji przekazać parametry (np oba hasła)?

  1. $post->rule('password', array($model, 'funkcja'));


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post
sabat24
post
Post #4





Grupa: Zarejestrowani
Postów: 175
Pomógł: 26
Dołączył: 13.09.2007
Skąd: Gdańsk

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



Mam teraz ograniczony dostęp do testowania rozwiązań pod kohaną, ale poniższa, standardowa reguła działa na takiej zasadzie, jaką chyba chcesz osiągnąć.

  1. ->rule('password_confirm', 'matches', array(':validation', 'password_confirm', 'password'));


:validation zawiera tablicę wszystkich pól i przekazuje to do wbudowanej funkcji matches, która wygląda tak:
  1. public static function matches($array, $field, $match)
  2. {
  3. return ($array[$field] === $array[$match]);
  4. }

Wystarczy, że na tym przykładzie oprzesz swoją funkcję, a ogólnie różne wersje zastosowania callbacków znajdziesz tutaj: blog.lysender.com/2011/02/kohana-3-1-validation-adventures/

Prawdopodobnie działający przykład może wyglądać tak:
  1. ->rule('password', array($model, 'funkcja_w_modelu'), array(':validation'));

Go to the top of the page
+Quote Post
Tuminure
post
Post #5





Grupa: Zarejestrowani
Postów: 178
Pomógł: 49
Dołączył: 16.04.2012
Skąd: Bytom

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


A czy funkcja equals nie załatwiłaby po prostu sprawy, zamiast bawić się w tego regexpa wink.gif?
  1. ->rule('password', 'equals', array(':value', $config["password"]));


Ten post edytował Tuminure 19.02.2013, 10:12:13
Go to the top of the page
+Quote Post
MateuszS
post
Post #6





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Faktycznie tak działa. Kombinowałem bo nie znalazłem tej funkcji w dokumentacji a takiej reguły właśnie tam brakowało aż dziwne:
http://kohanaframework.org/3.2/guide/kohan...rity/validation
Niestety trochę niekompletna ona jest. Dzieki


--------------------
O! Zimniok :P
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 10:36