Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Laravel 5.3 - Validation
kamil_lk
post
Post #1





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


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';


Ten post edytował kamil_lk 4.02.2017, 12:20:27
Go to the top of the page
+Quote Post
DarkAbso
post
Post #2





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


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);


Ten post edytował DarkAbso 4.02.2017, 12:24:36
Go to the top of the page
+Quote Post
kamil_lk
post
Post #3





Grupa: Zarejestrowani
Postów: 325
Pomógł: 33
Dołączył: 31.05.2008

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


Ś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";


Ten post edytował kamil_lk 4.02.2017, 13:01:32
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 - 14:25