Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [inny] Laravel 5.4 - własna reguła walidacyjna
Forum PHP.pl > Forum > PHP > Frameworki
michau85
Hej.
Jestem początkujący w Laravel i mam problem przy tworzeniu własnej reguły walidacyjnej. Chcę stworzyć regułę podobną do wbudowanej 'required', w której błąd ma się pojawiać gdy pole formularza jest puste. Zgodnie z dokumentacją regułę dodaje w klasie AppServiceProvider tak jak poniżej:
  1. Validator::extend('wymagane', function ($attribute, $value, $parameters, $validator) {
  2. $data = $validator->getData();
  3. if (is_null($data['email'])==false) {
  4. return true;
  5. }
  6. else {
  7. return false;
  8. }
  9.  

Niestety komunikat się nie poajwia. Próbowałem już różnych kombinacji z empty() i isset() i wciąż bez skutku. Pomóżcie.
nospor
Idealny przyklad jak mozna skomplikowac banalny warunek logiczny

Nie:

  1. if (is_null($data['email'])==false) {
  2. return true;
  3. }
  4. else {
  5. return false;
  6. }


a poprostu

  1. return empty($data['email']);


Tudziez
  1. return !empty($data['email']);


W zaleznosc co to ma zwraca by sie wlaczyl walidator - nie chce mi sie czytac dokumentacji
michau85
Twój sposób nie działa. Komunikat pojawia się wtedy kiedy nie trzeba - gdy pole jest wypełnione. Niestety temat ten w dokumentacji opisany jest bardzo powierzchownie.
nospor
Podalem ci dwie wersje kodu. Sprawdzales dla obu?
michau85
Tak. Niezależnie od tego czy zastosuje wykrzyknik czy nie efekt jest taki jak napisałem.
nospor
1) Czyli niezaleznie czy zwracasz TRUE czy FALSE to walidator dziala do dupy. W takim razie moze to byc wina tego jak go podpiales a nie kodu w srodku. Co nie zmienia faktu, ze poprawka ktora ci wrzucilem powinna zostac, bo twoje "milion" linijek zamiast jednej niczemu nie sluzy wink.gif
2) Dla pewnosci sprawdz jeszcze co zawiera $data wewnatrz twojej funkcji
michau85
Znalazłem rozwiązanie jak dokładniej wczytałem się w dokumentację. Dla reguł sprawdzających czy zmienna jest pusta powinna być zastosowana inna metoda. ZamiastValidator::extend() powinienem użyć Validator::extendImplicit()
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-2024 Invision Power Services, Inc.