我有一个名为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',
);
这不是一种非常干净的方式,但它应该有效。