2016-06-16 6 views
0

Вопрос, который я хочу задать, - это вопрос о том, как получить имя атрибута или отобразить имя атрибута с помощью настраиваемого валидатора.Валидатор Laravel (Получить имена атрибутов в Replacer)

$validator = Validator::make($request->all(), $model->get_update_rules()); 
    $validator->setAttributeNames(["attribute_name" => "Beauty Name"]); 

Код, приведенный выше, является кодом, который я использую для создания валидатора.
Код ниже - это код, который я использую для создания Custom Validator.

Validator::extend ('custom_validator', function ($attribute, $value, $parameters, $validator) { 
     return false; 
    }); 
    Validator::replacer('custom_validator', function($message, $attribute, $rule, $parameters) { 
     return str_replace(":other", $parameters[1], $message); 
    }); 

$ parameters [1] дайте мне имя атрибута вместо имени красоты. Как я могу отобразить имя красоты в моем настраиваемом валидаторе?

ответ

1

Наконец я решить эту проблему путем расширения Validator, что предоставленный Laravel.

use Illuminate\Validation\Validator; 
use Symfony\Component\Translation\TranslatorInterface; 
use DB; 
use Illuminate\Support\Facades\Input; 
class CustomValidator extends Validator{ 
    public function __construct(TranslatorInterface $translator, array $data, array $rules, array $messages = [], array $customAttributes = []) 
    { 
     parent::__construct($translator, $data, $rules, $messages, $customAttributes); 
    } 

    protected function validateCustomValidator($attribute, $value, $parameters){ 
     return false; 
    } 

    protected function replaceCustomValidator($message, $attribute, $rule, $parameters){ 
     return str_replace(':other', $this->getAttribute($parameters[1]), $message); 
    } 
} 

Приведенный выше код используется для создания CustomValidator, который расширяет проверку, предоставленную Laravel. В ваших провайдерах услуг вы должны добавить код, как показано ниже, для разрешения вашего CustomValidator.

use Illuminate\Support\ServiceProvider; 
use App\Validator\CustomValidator; 
use Validator; 
class ValidatorServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     Validator::resolver(function($translator, $data, $rules, $messages, $customAttributes) 
     { 
      return new CustomValidator($translator, $data, $rules, $messages, $customAttributes); 
     }); 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

Не забудьте добавить эту строку внутри вас конфиг/app.php

App\Providers\ValidatorServiceProvider::class 
0

Предполагая, что вы пытаетесь отобразить Beauty Name в сообщении об ошибке, вы можете сделать что-то вроде:

Validator::replacer('custom_validator', function($message, $attribute, $rule, $parameters) { 
    return str_replace([':value'], $parameters, $message); 
}); 

// Error message for failure 
$messages = [ 'custom_validator' => ':attribute is :value' ]; 

// validate input 
$validation = Validator::make(Input::all(), $rules, $messages); 
+0

Привет, Я был протестирован с кодом, который вы предоставили. Это не работает. Он по-прежнему показывает имя атрибута вместо имени красоты. Спасибо. –

0

Я ве решил проблему с классом валидатора. Вы можете заменить вещи в валидации в аналогичном поведении. Этот вопрос находится на Laravel 5.3, но я думаю, что он применим к 5.1 и даже 4.

<?php 

namespace App\Validators; 

use Illuminate\Validation\Validator; 

/** 
* NumbersValidator 
* 
* @package App\Validators 
*/ 
class NumbersValidator 
{ 
    /** 
    * @param array $attribute 
    * @param int $value 
    * @param array $parameters 
    * @param Validator $validator 
    * @return bool 
    */ 
    public function validateDivisibleOn($attribute, $value, $parameters, Validator $validator) 
    { 
     $validator->addReplacer('divisible_on', function ($message, $attribute, $rule, $parameters) use ($validator) { 
      return \str_replace(':other', $parameters[0], $message); 
     }); 

     return ($value % array_shift($parameters) == 0); 
    } 
} 
Смежные вопросы