在Laravel Model

时间:2016-05-13 17:41:05

标签: php laravel model laravel-5 blade

我正在尝试在Laravel模型中创建自定义属性。对于所有Model实例,此属性都是相同的(静态?)。目标是在创建Model实例时使用此属性填充选择下拉列表。例如:

class User extends Model
{
    protected $table = 'users';
    protected $guarded = [ 'id' ];
    public $timestamps = true;

    protected $genders = ['male'=>'Male', 'female'=>'Female'];  //custom

    public static function getGenderOptions() {
        return $genders;
    }
}

然后在构建表单时,我可以做类似的事情:

// UserController.php
$data['select_options'] = User::getGenderOptions();
return view('user.create', $data);

// create.blade.php
{!! Form::select( 'gender', $select_options ) !!} 

这导致我得到错误:

Undefined variable: genders

我正在尝试使用所有选择选项来防止控制器混乱,因为还有一些我没有包含的其他选项。

感谢。

2 个答案:

答案 0 :(得分:1)

修改您的protected $genders元素并将其设为public + static。那么您可以直接访问它:User::$genders

但是......我个人的决定是将常量移动到配置文件或某种帮助器。

答案 1 :(得分:0)

我想它应该是

public function getGenderOptions() {
    return $this->genders;
}

或者只是将$genders声明为静态变量并使用return self::$genders

检查文档 - Variable scopeStatic Keyword