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

时间:2014-09-11 13:45:44

标签: php validation laravel lang

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

问题是,我试图使用' Lang'获得翻译的消息,但它不起作用,我不知道为什么。

验证类:

<?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',

    );


}

我得到的错误:

  

语法错误,意外&#39;(&#39;,期待&#39;)&#39;

当我尝试使用时:

  

&#39;诺姆&#39; =&GT;郎::得到(&#39; site.nome&#39),

有人可以帮帮我吗? :)

1 个答案:

答案 0 :(得分:0)

您不能在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',

);

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