2017-01-17 2 views
1

У меня есть запрос клиента следующим образом:Laravel - ассоциативный массив проверки в пользовательском запросе

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

Я проверка его с пользовательским запросом:

class UpdateProfileRequest extends Request 
{ 
    public function authorize() 
    { 
     return true; 
    } 

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

валидатор не работает. Я думаю, это потому, что. * Работает только для нумерованных массивов, а не для ассоциативных массивов?

Я не уверен, как это сделать.

Есть ли способ сделать это с помощью пользовательского запроса, подобного этому? Если да, то какой синтаксис?

В противном случае, что мне делать. Я уже писал пользовательский код внутри метода контроллера так:

$hasIntro = false; 
    $hasBio = false; 

    foreach($request->get('intro') as $language => $localIntro) 
    { 
     if(!empty($request->get('intro')[$language])) 
     { 
      $hasIntro = true; 
     } 
    } 

    if(!$hasIntro or !$hasBio) 
    { 
     return redirect()->back()->withErrors('You must enter at least 1 Bio and 1 Intro'); 
    } 

который я думаю, может быть один ручным способом идти об этом. Хотя я считаю, что сErrors требует валидатора, поэтому я возвращаюсь к той же проблеме ... Хотя, возможно, есть способ сделать это вручную?

Мое идеальное решение - найти синтаксис ассоциативного массива, если это действительно существует?

+0

использование Еогеасп петля с правилами – Bugfixer

ответ

1

Я не уверен, о правильном пути , но моя идея что-то вроде этого

public function rules($inputs) 
{ 
    $rules = []; 
    foreach ($inputs as $key => $val) { 
     if (strpos($key, "intro") === 0){ 
      $rules[$key] = 'required|max:100'; 
     } 
    } 
    return $rules; 
} 
0
class UpdateProfileRequest extends Request 
    { 
     /** 
     * Determine if the user is authorized to make this request. 
     * 
     * @return bool 
     */ 
     public function authorize() 
     { 
      return true; 
     } 

     /** 
     * Get the validation rules that apply to the request. 
     * 
     * @return array 
     */ 
     public function rules() 
     { 
      return [ 
       'intro.*'    => 'required|max:100' 
      ]; 
     } 


     /** 
     * @param Validator $validator 
     * 
     * @return mixed 
     */ 
     protected function formatErrors(Validator $validator) 
     { 
      return $validator->errors()->all(); 
     } 
    } 

Вы имеете под тем же именем, так убедитесь, что он по-другому или удалить один, имя изменения.

<textarea name="intro[fr]"></textarea> 
<textarea name="intro[fr]"></textarea> 
+0

Это довольно много, что я отправил? – iKode

+0

Это работа для вас или нет? –

1
public function rules() 
{ 
     $rules = []; 

     $intro = $this->request->get('intro'); 

     if (!empty($intro)) { 
      foreach ($intro as $index => $doc) { 
       $rules[sprintf('intro.%d', $index)] = 'required|max:100'; 
      } 
     } 

     return $rules; 
    } 
Смежные вопросы