Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Laravel 5.3 - Validation
Forum PHP.pl > Forum > Przedszkole
kamil_lk
Hej,

Próbuję zwalidować formularz przygotowany pod wielojęzyczność
  1. <input type="text" name="lorem[1]">
  2. <input type="text" name="ipsum[1]">
  3.  
  4. <input type="text" name="lorem[2]">
  5. <input type="text" name="ipsum[2]">
  6. </form>


Zatrzymałem się w momencie, gdzie użytkownik wypełniając formularz nie chce dodać wersji w danym języku, tj. pozostawia te pola puste.
Czyli dane lecą np. takie:
Kod
lorem[1] = 'test';
ipsum[1] = 'test2';

lorem[2] = '';
ipsum[2] = '';


Z dokumentacji laravel wyczytałem, że jest możliwość wymuszenia uzupełnienia pola w przypadku, gdy inne pole zostało uzupełnione.
required_with_all:foo,bar,...

Poniżej przedstawiam mój sposób tworzenia tablicy do walidacji
  1. $langs = [1, 2]
  2. foreach($langs as $lang)
  3. {
  4. $validator['lorem['.$lang.']'] = "required_with_all:ipsum[$lang]|min:3";
  5. $validator['ipsum['.$lang.']'] = "required_with_all:lorem[$lang]|min:3";
  6. }
  7. $this->validate($request, $validator);


Jeszcze kilka przykładów poprawnej walidacji:
Kod
lorem[1] = 'test';
ipsum[1] = 'test2';

lorem[2] = '';
ipsum[2] = '';

Kod
lorem[1] = 'test';
ipsum[1] = 'test2';

lorem[2] = 'test3';
ipsum[2] = 'test4';

Kod
lorem[1] = '';
ipsum[1] = '';

lorem[2] = 'test3';
ipsum[2] = 'test4';


oraz niepoprawnej:
Kod
lorem[1] = '';
ipsum[1] = '';

lorem[2] = '';
ipsum[2] = '';

Kod
lorem[1] = 'test';
ipsum[1] = '';

lorem[2] = '';
ipsum[2] = '';

Kod
lorem[1] = 'test';
ipsum[1] = '';

lorem[2] = 'test3';
ipsum[2] = 'test4';
DarkAbso
Niejestem pewien czy potrzebna jest tam pętla. Zweryfikuj czy to zadziała.
  1. $validator = [ 'lorem.*' => "required_with:ipsum.*|min:3",
  2. 'ipsum.*' => "required_with:lorem.*|min:3",];
  3. $this->validate($request, $validator);
kamil_lk
Śmiga prawie elegancko, poza jednym przypadkiem, gdzie nie wypełnimy żadnego z pól dla każdego języka.

Dodam jeszcze, że ponad językami posiadam jedno pole dla 'całości'

Kod
<select name='test'>
<option value='1'>Numer 1</option>
<option value='2'>Numer 2</option>
</select>


Walidacja wygląda w ten sposób:
  1. $validator['test'] = "required|integer";
  2. $validator['lorem.*'] = "required_with_all:ipsum.*|min:3";
  3. $validator['ipsum.*'] = "required_with_all:lorem.*|min:3";
  4.  
  5. $this->validate($request, $validator);


Może da się jakoś to ugryźć walidując pole 'test', które jest wymagane łącznie z dwoma polami z danego języka?
Robię w ten sposób, ale nie działa:
  1. $validator['test'] = "required|required_with_all:lorem.*,ipsum.*|integer";
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-2025 Invision Power Services, Inc.