2017-01-17 4 views
2

ich eine Form Array wie so haben:Laravel - Formular-Validierung - Array ein Minimum 1 Feld erforderlich

<textarea name="intro[en]"></textarea> 
<textarea name="intro[fr]"></textarea> 
<textarea name="intro[de]"></textarea> 

Ich habe Validierungsregeln wie die folgenden:

public function rules() 
{ 
     return [ 
      'intro.*' => 'required' 
     ]; 
} 

Was würde ich wirklich brauchen, ist dass mindestens eines der Intro s ausgefüllt ist.

Ist das mit vorhandenen Validatoren möglich? Wenn ja, wie lautet die Syntax? Wenn nicht, wie würde ich diesen Validator erstellen?

Antwort

1

Was Sie suchen ist required_without_all:

'intro.en' => 'required_without_all: intro.fr, intro.de', 
'intro.fr' => 'required_without_all: intro.en, intro.de', 
'intro.de' => 'required_without_all: intro.en, intro.fr', 
0

Sie versuchen, diese können auch

'intro' => 'required|array|min:1' 
0

Ich denke, Sie sollten versuchen, diese:

public function rules() 
{ 
return [ 
    'intro.*.en' => 'required', 
    'intro.*.fr' => 'required', 
    'intro.*.de' => 'required', 
]; 
} 

Hoffnung diese Arbeit für Sie!

0

Sie können eine benutzerdefinierte Regel für sie innerhalb AppServiceProvide wie unten Code definieren

$this->app['validator']->extend('emptyArray', function ($attribute, $values, $parameters) 
    { 
     foreach($values as $data){ 
      if(count($data)) return true; 
     } 
     return false; 
    }); 

    Validator::replacer('emptyArray', function ($message, $attribute, $rule, $parameters) { 
    return 'You need to fill up at least one field for '.$attribute; 

es wird überprüft, ob das Array Feld leer ist oder nicht.

Verwandte Themen