2015-07-14 3 views
1

Я новичок в Laravel, и я пытаюсь создать приложение, которое в какой-то момент имеет форму, в которой у меня есть поле массива, чтобы позволить конечному пользователю введите столько информации, сколько ему нравится.Laravel 5.1: Пользовательский валидатор с пользовательскими сообщениями об ошибках

Моей полевая форма таково:

<div class="rule"> 
    <div class="target"> 

     <select name="rule[0][0][target]" id="target_NSBYS" class="form-control"> 
      <option value="url">URL</option> 
      <option value="referrer">Referrer</option> 
     </select> 
    </div> 
    <div class="condition"> 
     <select name="rule[0][0][condition]" id="condition_NSBYS" class="form-control"> 
      <option value="equals">Equals</option> 
      <option value="contains">Contains</option> 
      <option value="starts_with">Starts With</option> 
      <option value="ends_with">Ends With</option> 
      <option value="regex">Matches RegExp</option> 
      <option value="not_equal">Doesn't Equal</option> 
      <option value="not_contains">Does not contain</option> 
      <option value="not_starts_with">Does not start with</option> 
      <option value="not_ends_with">Does not end with</option> 
      <option value="not_regex">Does not match RegExp</option> 
     </select> 
    </div> 
    <div class="rule"> 
     <input type="text" id="rule_NSBYS" name="rule[0][0][rule]" placeholder="Rule value" value="" class="form-control"> 
    </div> 
    <div class="actions"> 
     <a href="javascript:void(0)" class="removeRule btn btn-sm btn-default">-</a> 
     <a href="javascript:void(0)" class="addRule btn btn-sm btn-default">+</a> 
    </div> 
</div> 

Таким образом, в задней части у меня зарегистрировать новый поставщик услуг, для того, чтобы зарегистрировать все мои пользовательские правила проверки внутри этого класса.

Поставщик услуг выглядит следующим образом:

<?php 
namespace App\Providers; 

use Illuminate\Support\ServiceProvider; 
use Illuminate\Support\Facades\Validator; 

class CustomValidationRules extends ServiceProvider 
{ 
    public function boot() 
    { 
     Validator::extend(
      'campaign_rules', 
      function ($attribute, $value, $parameters) { 

       $valid = true; 

       foreach ($value as $group_id => $group_fields) { 

        foreach ($group_fields as $field_id => $field_set) { 
         $result = Validator::make(
          $field_set, 
          array(
           'target' => 'required|in:url,referrer', 
           'condition' => 'required|in:equals,contains,starts_with,ends_with,regex,not_equal,not_contains,not_starts_with,not_ends_with,not_regex', 
           'rule'  => 'required' 
          ), 
          array(
           'target.required' => sprintf(
            'The target field in the %d rules group, in the %d rule it is required', 
            $group_id, 
            $field_id 
           ), 
           'target.in' => sprintf(
            'The target field in the %d rules group, in the %d rule contains a wrong value', 
            $group_id, 
            $field_id 
           ), 
           'condition.required' => sprintf(
            'The conditional field in the %d rules group, in the %d rule it is required', 
            $group_id, 
            $field_id 
           ), 
           'condition.in' => sprintf(
            'The conditional field in the %d rules group, in the %d rule contains a wrong value', 
            $group_id, 
            $field_id 
           ), 
           'rule.required' => sprintf(
            'The rule field in the %d rules group, in the %d rule can\'t be empty', 
            $group_id, 
            $field_id 
           ) 
          ) 
         ); 

         if ($result->fails()) { 
          $valid = false; 

          break 1; 
          break 2; 
         } 
        } 
       } 

       return $valid; 
      } 
     ); 
    } 
} 

Также у меня есть пользовательский класс запрос, чтобы проверить мои данные формы и содержит следующий код:

<?php 

namespace App\Http\Requests; 

use App\Eb\Helpers; 
use App\Http\Requests\Request; 

class CampaignValidation extends Request 
{ 
    public function authorize() 
    { 
     if (Helpers::is_super_admin() || Helpers::is_client()) { 
      return true; 
     } 

     return false; 
    } 

    public function rules() 
    { 
     return [ 

      'name'    => 'required|max:255', 
      'status'   => 'required|in:active,paused,archived', 
      'publication_date' => 'required|date_format:Y-m-d H:i', 
      'expiration_date' => 'required|date_format:Y-m-d H:i', 
      'mode'    => 'required|in:normal,aggressive', 
      'rule'    => 'campaign_rules' 

     ]; 
    } 
} 

Итак, используя этот код, я могу подтвердите нормальный мой код, но, к сожалению, сообщение об ошибке, которое я получаю после процесса проверки, выглядит следующим образом:

Errors occurred 
    validation.campaign_rules 

и это не приятно. Как вы уже видели, у поставщика услуг, когда я использую Validator :: make, я использую третий параметр, чтобы возвращать правильные сообщения об ошибках.

Итак, вопрос в том, как я могу отправить это сообщение об ошибке в начале моего приложения?

+1

Почему 'rule.rule.required'? Должно ли это не быть 'rule.campaign_rules'? В 5.1 я думаю, что сообщения задаются в файлах языков. – Jeemusu

+0

Это был просто истец, и я забыл его удалить. Я пытаюсь много думать и никто не работал :(Любая идея о том, как решить эту проблему? –

+0

Я только что исправил :) –

ответ

2

Попробуйте переопределение метода messages() в вашем СформироватьЗапрос, например, так:

public function messages() 
{ 
    return [ 
     'validation.campaign_rules' => 'My custom validation message', 
    ]; 
} 
Смежные вопросы