在Laravel请求对象中使用变量名

时间:2018-07-03 16:22:38

标签: php laravel laravel-5

我需要能够遍历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来完成。

2 个答案:

答案 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();
}