我有一个名为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),
有人可以帮帮我吗? :)
答案 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',
);
这不是一种非常干净的方式,但它应该有效。