我有一个模型,我试图使用存在的验证规则,如
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验证,还是需要采取不同的策略?
答案 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}",
];