我想问的问题是如何获得属性名或如何使用自定义验证器显示属性名。
$validator = Validator::make($request->all(), $model->get_update_rules());
$validator->setAttributeNames(["attribute_name" => "Beauty Name"]);上面的代码是我用来创建验证器的代码。
下面的代码是我用来创建自定义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);
});$parameters1给了我attribute_name而不是美女的名字。如何在自定义验证器中显示“美女”名称?
发布于 2016-06-17 08:41:14
最后,我通过扩展Laravel提供的Validator来解决这个问题。
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提供的Validator。在您的服务提供者中,您必须按照下面的代码添加代码来解析您的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()
{
//
}
}记住在config/app.php中添加这一行
App\Providers\ValidatorServiceProvider::class发布于 2016-06-16 13:40:23
假设您试图在错误消息中显示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 );发布于 2016-12-06 09:15:09
我已经解决了自定义验证器类的问题。您可以在类似的行为中替换验证中的内容。这是在Laravel5.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);
}
}https://stackoverflow.com/questions/37856943
复制相似问题