【发布时间】:2017-04-21 20:35:32
【问题描述】:
我正在创建一个包并想要钩子功能(当用户更新我的应用程序中的字段时,包应该注入一些额外的验证规则)。
我设法使用事件系统做到了这一点。我所做的是将 $rules 变量和 $request 传递给监听器,我修改 $rules 变量并返回它。
这是不好的做法吗?推荐的方法是什么?
我的意思是,它有效。我只是不确定这是否是最好的方法。
代码如下:
SettingsController.php(位于 App/ 下,我正在验证更新)
public function update(Setting $setting, Request $request)
{
$rules = [
'package' => 'required|in:'.implode(config('app.packages'),','),
'name' => 'required|max:255|alpha_dash|not_contains:-|unique:auth_setting,name,'.$setting->id.',id,package,'.$setting->package,
'description' => '',
];
// Is this bad??
$rules = Event::fire(new SettingsWereSubmitted($request,$rules))[0];
$v = Validator::make($request->all(),$rules);
然后在我的包(packages/exchange/src/Listeners)中我得到了这个监听器(ValidateSettings.php):
public function handle(SettingsWereSubmitted $event)
{
if($event->request->package == 'exchange')
{
// Add rules
$rules = [
'fee' => 'required|decimal|min_amount:0|max_amount:1|max_decimal:8',
'freeze_trade' => 'required|in:1,0',
];
$event->rules['value'] = $rules[$event->request->name];
return $event->rules;
}
}
【问题讨论】:
标签: php laravel events hook laravel-5.2