Laravel 验证属性“好名字”

2022-08-30 07:46:07

我正在尝试使用“语言>{language}> validation.php”中的验证属性,以替换:属性名称(输入名称)作为正确读取的名称(例如:first_name >名字)。它似乎使用起来非常简单,但验证器不会显示“好名字”。

我有这个:

'attributes' => array(
    'first_name' => 'voornaam'
  , 'first name' => 'voornaam'
  , 'firstname'  => 'voornaam'
);

要显示错误:

@if($errors->has())
  <ul>
  @foreach ($errors->all() as $error)
    <li class="help-inline errorColor">{{ $error }}</li>
  @endforeach
  </ul>
@endif

控制器中的验证:

$validation = Validator::make($input, $rules, $messages);

$messages数组:

$messages = array(
    'required' => ':attribute is verplicht.'
  , 'email'    => ':attribute is geen geldig e-mail adres.'
  , 'min'      => ':attribute moet minimaal :min karakters bevatten.'
  , 'numeric'  => ':attribute mag alleen cijfers bevatten.'
  , 'url'      => ':attribute moet een valide url zijn.'
  , 'unique'   => ':attribute moet uniek zijn.'
  , 'max'      => ':attribute mag maximaal :max zijn.'
  , 'mimes'    => ':attribute moet een :mimes bestand zijn.'
  , 'numeric'  => ':attribute is geen geldig getal.'
  , 'size'     => ':attribute is te groot of bevat te veel karakters.'
);

有人能告诉我我做错了什么吗?我希望将 :属性名称替换为属性数组(语言)中的“nice name”。

谢谢!

编辑:

我注意到问题是我从来没有为我的Laravel项目设置默认语言。当我将语言设置为“NL”时,上面的代码有效。但是,当我设置语言时,语言将显示在URL中。我宁愿它没有。

所以我的下一个问题:是否可以从URL中删除语言,或者设置默认语言,使其不显示在那里?


答案 1

是的,您所说的“好名字”属性在几个月前是一个真正的“问题”。希望此功能现已实现,并且使用起来非常简单。

为简单起见,我将拆分两个选项来解决此问题:

  1. 全球可能更广泛。这里很好地解释了这种方法,但基本上您需要编辑应用程序/语言/XX/验证.php验证文件,其中XX是您将用于验证的语言。

    在底部,您将看到一个属性数组;这将是你的“好名字”属性数组。按照您的示例,最终结果将如下所示。

    'attributes' => array('first_name' => 'First Name')
    
  2. 本地这就是泰勒·奥特韦尔(Taylor Otwell)在本杂志中所说的:

    您现在可以在验证程序实例上调用 setAttributeNames。

    这是完全有效的,如果你检查源代码,你会看到

    public function setAttributeNames(array $attributes)
    {
        $this->customAttributes = $attributes;
    
        return $this;
    }
    

    因此,要以这种方式使用,请参阅以下简单示例:

    $niceNames = array(
        'first_name' => 'First Name'
    );
    
    $validator = Validator::make(Input::all(), $rules);
    $validator->setAttributeNames($niceNames); 
    

资源

Github上有一个非常棒的存储库,它有很多语言包可供使用。绝对你应该检查一下。

希望这有帮助。


答案 2

这个特定问题的正确答案是转到您的app/lang文件夹并编辑验证.php文件底部有一个名为属性的数组:

/*
|--------------------------------------------------------------------------
| Custom Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as E-Mail Address instead
| of "email". This simply helps us make messages a little cleaner.
|
*/

'attributes' => array(
    'username' => 'The name of the user',
    'image_id' => 'The related image' // if it's a relation
),

因此,我相信此数组是为专门自定义这些属性名称而构建的。


推荐