当前位置: 首页 > 知识库问答 >
问题:

Laravel验证属性"好名字"

田普松
2023-03-14

我正在尝试使用“语言”中的验证属性

我有这个:

'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.'
);

有人能告诉我我做错了什么吗。我希望:attribute name在attributes数组(语言)中被替换为“nice name”。

谢谢

编辑:

我注意到问题是我从来没有为我的Laravel项目设置默认语言。当我设置语言为'NL'上面的代码工作。但是,当我设置我的语言时,该语言将出现在url中。我更希望不是。

所以我的下一个问题是:是否可以从url中删除语言,或者设置默认语言,这样它就不会出现在那里?

共有3个答案

朱啸
2023-03-14

因为Laravel 5.2你可以...

public function validForm(\Illuminate\Http\Request $request)
{
    $rules = [
        'first_name' => 'max:130'
    ];  
    $niceNames = [
        'first_name' => 'First Name'
    ]; 
    $this->validate($request, $rules, [], $niceNames);

    // correct validation 
罗睿识
2023-03-14

这个问题的正确答案是转到你的app/lang文件夹并编辑验证。php文件在文件底部有一个名为attributes的数组:

/*
|--------------------------------------------------------------------------
| 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
),

所以我相信这个数组是专门定制这些属性名的。

江高飞
2023-03-14

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

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

>

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

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

    'attributes' => array('first_name' => 'First Name')
    

    在当地,泰勒·奥特威尔(Taylor Otwell)在这一问题上说:

    您现在可以在验证器实例上调用setAttributeName。

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

    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上有一个非常棒的回购协议,有很多语言包可以使用。当然你应该去看看。

    希望这有帮助。

  •  类似资料:
    • As we learned earlier in the book, the validate method on a Model is called before set and save, and is passed the model attributes updated with the values from these methods. By default, where we def

    • 我们正在构建一个需要精确性的apiendpoint。我们希望对POST/PUT到服务器的参数实施严格的验证。 如果api用户发送了一个不受支持的对(例如,我们允许参数[first\u name,last\u name],并且用户包含一个不受支持的参数[country]),我们希望验证失败。 已尝试构建名为(用作)的自定义验证器,但要使其在数组中可用,必须将其应用于嵌套/子属性列表的父级(…因为我们

    • 晚上好,我正在尝试在下面的场景中使用Hibernate验证器:

    • 我想使用BouncyCastle生成一个简单的CMS签名。这代码管用! 但是,如何添加签名属性呢? 我要删除默认签名属性并添加签名策略标识符。 文章非常欢迎。

    • 我正在用一些电影信息创建这种数据库。 逻辑结构非常简单,一部电影有很多演员,一个演员拍了很多电影,所以这是一种多对多的关系。 我还使用library创建了一个简单的输入,其中写入了标记之类的参与者,并用逗号或空格键(此处是指向文档的链接)将它们分隔开,下面是一个简单的快照,以便更好地理解结果 在创建/存储函数中,我不需要检查是否存在任何关系,因为电影是新的。所以我只需要检查演员是否已经存在于数据库

    • 问题内容: 我有一个laravel 模型,该模型在和上具有唯一的验证规则。在我的存储库中,当我更新模型时,我将重新验证字段,以使所需的规则验证没有问题: 测试失败 有没有办法优雅地解决这个问题? 问题答案: 将当前正在更新的实例的追加到验证器。 传递实例的来忽略唯一的验证器。 在验证器中,使用参数来检测您是否正在 更新 或 创建 资源。 如果进行更新,则强制唯一规则忽略给定的id: 如果创建,请照