【问题标题】:Laravel validation with lang for input namesLaravel 使用 lang 验证输入名称
【发布时间】:2014-11-05 12:01:04
【问题描述】:

我有一个名为 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',

    );


}

我得到的错误:

语法错误,意外'(',期待')'

当我尝试使用时:

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

有人可以帮帮我吗? :)

【问题讨论】:

  • 我不熟悉 Laravel,所以也许有人可以建议它“Laravel 方式”。当前代码中的问题是您在定义属性时尝试使用函数调用。我建议创建一个在构造函数中调用的方法来填充 PrestadorSiteValidator::names (并从静态访问切换(对象是通过任何一种方式创建的,因此它不应该破坏太多东西)。
  • 是的,我从名称中删除了“静态”,并将其初始化为空。我想我会像你说的那样进行更改以填充构造函数中的名称。谢谢:)

标签: php validation laravel lang


【解决方案1】:

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

);

这不是一种非常干净的方式,但它应该可以工作。

【讨论】:

  • 好吧,感谢您指出这一点!但问题是我需要打电话给 Lang 来获取翻译,我想不出更好的方式来做到这一点:(
  • 已编辑以提供一种方法。
  • 谢谢你!像魅力一样工作!我在我的抽象验证器中调用了这个函数。我认为这样更容易。我还不能竖起大拇指你的答案,但我会尽快做! :D
  • 哦,我只是忽略了你已经有扩展的事实,太好了!没问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-27
  • 2023-03-30
  • 2017-07-10
  • 1970-01-01
  • 2015-07-24
  • 2017-01-16
相关资源
最近更新 更多