Laravel本地化类变量


Laravel localization class variables

我在定义类变量时遇到问题,例如,当验证表单时,这里是源代码

class LoginFormRequest extends DefaultFormRequest
{

    protected $rulesMessages = [
        'name' => [
            'required' => trans('messages.enter_username')
        ],
        'password' => [
            'required' => trans('messages.enter_password')
        ]
    ];
}

返回错误为"语法错误,意外的'(',应为']'"

尝试将它们移动到__construct方法中。

public function __construct()
{
    $this -> rulesMessages = [
        'name' => [
            'required' => trans('messages.enter_username')
        ],
        'password' => [
            'required' => trans('messages.enter_password')
        ]
    ];
}

允许任何类属性被初始化为的任何值都必须是常量(我不是指属性本身,我是指您试图将其初始化为的数据)。所有这一切都意味着,无论它是什么,都必须在编译时而不是运行时知道,因此在提取您试图将属性初始化为的值之前,它不能依赖于任何其他实际运行的代码。这就是为什么它是编译器(语法)错误,而不是运行时间错误。手册中的相关引用:

此声明可能包括一个初始化,但此初始化必须是一个常数值——也就是说,它必须能够在编译时进行求值,并且必须不依赖于运行时信息才能进行求值。

以下所有内容都是有效的类属性初始化:

class One
{
    protected $one = 'One';
}
class Two
{
    protected $two = 2;
}
class Three
{
    protected $three = [
        1 => 'one',
        2 => 'two'
    ];
}
// We can use constants defined using const keyword, because they are 
// evaluated at compile time. See http://stackoverflow.com/a/3193704/697370
const FOUR_CONST = 4;
class Four
{
    protected $four = FOUR_CONST;
}

以下是无效的类属性初始化:

class BadOne
{
    protected $one = foo();
}
$IamAboolean = false;
class BadTwo
{
    protected $two = $IamAboolean ? false : true;
}
class BadThree
{
    protected $three = 5 + 4;
}