使用lang对输入名称进行Laravel验证


Laravel validation with lang for input names

我有一个名为Validator的类,它处理我需要进行的所有验证,还有一个类用我的规则和错误名称扩展了我的类。

问题是,我试图用"郎"来翻译信息,但它不起作用,我不知道为什么。

验证类别:

<?php namespace App'Services'Validators;
abstract class Validator {
    protected $data;
    public $errors;
    public static $rules;
    public static $names;
    public function __construct($data = null)
    {
        $this->data = $data ?: 'Input::all();
    }
    public function passes()
    {
        $validation = 'Validator::make($this->data, static::$rules, array(), static::$names);
        if ($validation->passes()) return true;
        $this->errors = $validation->messages();
        return false;
    }
}

我的扩展验证器的类:

use Lang;
class PrestadorSiteValidator extends Validator {
    public static $rules = array(
        'nome'                  => 'required',
        'nome_fantasia'         => 'required',
        'email'                 => 'required|confirmed',
        'identificador'         => 'required',
        'pais_id'               => 'required',        
        'codigo_postal'         => 'required',
        'estado'                => 'required',
        'cidade'                => 'required',
        'rua'                   => 'required',
        'bairro'                => 'required',
    );
    public static $names = array(
        'nome'          => Lang::get('site.nome'),
        'nome_fantasia' => 'Nome Fantasia',
        'email'         => 'Email',
        'identificador' => 'CNPJ',
        'pais_id'       => 'País',
        'codigo_postal' => 'Código Postal',
        'estado'        => 'Estado',
        'cidade'        => 'Cidade',
        'rua'           => 'Rua',
        'bairro'        => 'Bairro',
    );

}

我得到的错误:

语法错误,意外的"(",应为")"

当我尝试使用:

'nome'=>Lang::get('site.nome'),

有人能帮我吗?:)

您不能在PHP变量定义语句中执行代码,因此,不要:

public static $names = array(
    'nome'          => Lang::get('site.nome'),
);

你必须做一些类似的事情

public static $names = array(
    'nome'          => 'site.nome',
);

编辑:

要做你需要做的事情,按照你的方式,你可以在你的抽象验证器中覆盖一个重要的方法:

<?php namespace App'Services'Validators;
abstract class Validator {
    protected function explodeRules($rules)
    {
        foreach(static::$names as $key => $value)
        {
            if (starts_with($value, 'lang::'))
            {
                static::$names[$key] = Lang::get(str_replace("lang::", "", $value));
            }
        }
        return parent::explodeRules($rules);
    }
}

然后使用它:

public static $names = array(
    'nome'          => 'lang::site.nome',
    'nome_fantasia' => 'Nome Fantasia',
    'email'         => 'Email',
    'identificador' => 'CNPJ',
    'pais_id'       => 'País',
    'codigo_postal' => 'Código Postal',
    'estado'        => 'Estado',
    'cidade'        => 'Cidade',
    'rua'           => 'Rua',
    'bairro'        => 'Bairro',
);

这不是一种非常干净的方式,但它应该有效。