使用Laravel存在验证,其条件使用函数

时间:2015-12-18 22:59:55

标签: laravel laravel-4

我有一个模型,我试图使用存在的验证规则,如

public static $rules =  ['item' => 'exists:items,item,company_id,\Auth::user()->active_company',
                          'location' => 'exists:locations,location,company_id,\Auth::user()->active_company',
            ];

此验证规则始终失败。

        $validation = Validator::make($this->attributes, static::$rules);

如果我修改特定user->active_company的规则,则可以。

public static $rules =  ['item' => 'exists:items,item,company_id,17',
                          'location' => 'exists:locations,location,company_id,17',
            ]; 

在检查规则时似乎没有评估函数\Auth::user()->active_company。我见过的所有例子都使用常量而不是函数。

这是否可以使用laravel验证,还是需要采取不同的策略?

1 个答案:

答案 0 :(得分:0)

将规则封装在单引号中意味着内容是按字面意思进行的。这意味着验证规则正在寻找一个公司ID,字面意思是'\ Auth :: user() - > active_company'而不是输出,为了示例,可能是1。

请参阅single quoted strings manual page

有几种方法可以做到:

  • 中断引号并使用句点(。)

    连接两个字符串
    public static $rules = [
        'item'     => 'exists:items,item,company_id,'.\Auth::user()->active_company,
        'location' => 'exists:locations,location,company_id,'.\Auth::user()->active_company,
    ];
    
  • 将active_company写入变量并中断引号并使用句点(。)连接两个字符串

    $activeCo = \Auth::user()->active_company;
    
    public static $rules = [
        'item'     => 'exists:items,item,company_id,'.$activeCo,
        'location' => 'exists:locations,location,company_id,'.$activeCo,
    ];
    
  • 将active_company写入变量并使用双引号,因为变量在double中扩展/解释。 “$ activeCo”或“{$ activeCo}”将起作用

    $activeCo = \Auth::user()->active_company;
    
    public static $rules = [
        'item'     => "exists:items,item,company_id,{$activeCo}",
        'location' => "exists:locations,location,company_id,{$activeCo}",
    ];