我需要能够遍历laravel请求变量列表并对其进行处理。我希望能够在调用请求对象时使用变量,以便可以循环运行它,而不是为每个代码写一行代码。
例如,我的文本输入中的名称可能看起来像这样
contact_main_name
contact_main_telephone
contact_main_email
contact_sub_name
contact_sub_telephone
contact_sub_email
contact_backup_name
contact_backup_telephone
contact_backup_email
在我的请求中,我不想写
$request->contact_main_name
$request->contact_main_telephone
对于我可能拥有的每种不同类型的联系人,我希望能够像这样遍历他们
$contactTypes = [
'main',
'sub',
'backup',
'head'
];
foreach($contactTypes as $type){
//Start a new contact
$contact = new Contact;
$contact->type = $type;
$contact->name = $request->${"contact_".$type."_name"};
$contact->telephone = $request->${"contact_".$type."_telephone"};
$contact->email = $request->${"contact_".$type."_email"};
$contact->save();
}
调用laravel $request
时如何使用变量名,以便我可以构建可能类型的数组并遍历所有这些类型?
注意
我知道我可以自己编辑输入字段,使其看起来像name="contact[type][name]"
,然后遍历它们,但是我无法更改输入名称,我必须通过控制器本身中的php来完成。
答案 0 :(得分:3)
正如评论中回答的那样,要执行此操作,请更改调用输入的方法,并使用实际的input()
函数本身。
$contactTypes = [
'main',
'sub',
'backup',
'head'
];
foreach($contactTypes as $type){
//Start a new contact
$contact = new Contact;
$contact->type = $type;
$contact->name = $request->input("contact_".$type."_name");
$contact->telephone = $request->input("contact_".$type."_telephone");
$contact->email = $request->input("contact_".$type."_email");
$contact->save();
}
答案 1 :(得分:0)
顺便说一句,您也可以对其稍加修改,以使用与字段名称匹配的数组索引。这将允许您稍后通过向数据库和HTML中添加适当的字段而无需触摸代码来添加字段,并使用array_keys()检索提交的类型以允许无缝添加类型。只要您的验证很严格,这可能是允许将来扩展的最自动化的方法...
例如字段名称:
contact[main][name]
contact[main][telephone]
...
contact[backup][email]
例如代码:
foreach(array_keys($request->input('contact')) as $type) {
$contact = Contact::create($request->input('contact.'.$type));
$contact->type = $type;
$contact->save();
}