首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel Validator (在Replacer中获取属性名称)

Laravel Validator (在Replacer中获取属性名称)
EN

Stack Overflow用户
提问于 2016-06-16 10:45:08
回答 3查看 2.3K关注 0票数 0

我想问的问题是如何获得属性名或如何使用自定义验证器显示属性名。

代码语言:javascript
复制
    $validator = Validator::make($request->all(), $model->get_update_rules());
    $validator->setAttributeNames(["attribute_name" => "Beauty Name"]);

上面的代码是我用来创建验证器的代码。

下面的代码是我用来创建自定义Validator的代码。

代码语言:javascript
复制
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而不是美女的名字。如何在自定义验证器中显示“美女”名称?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-17 08:41:14

最后,我通过扩展Laravel提供的Validator来解决这个问题。

代码语言:javascript
复制
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。

代码语言:javascript
复制
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中添加这一行

代码语言:javascript
复制
    App\Providers\ValidatorServiceProvider::class
票数 1
EN

Stack Overflow用户

发布于 2016-06-16 13:40:23

假设您试图在错误消息中显示Beauty Name,则可以执行以下操作:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-12-06 09:15:09

我已经解决了自定义验证器类的问题。您可以在类似的行为中替换验证中的内容。这是在Laravel5.3,但我认为它适用于5.1甚至4。

代码语言:javascript
复制
<?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);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37856943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档