Использование имени переменной в объекте запроса Laravel - PullRequest
0 голосов
/ 03 июля 2018

Мне нужно иметь возможность просматривать список переменных запроса 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 голосов
/ 22 марта 2019

Кроме того, вы также можете немного изменить его, чтобы использовать индексы массива, соответствующие именам полей; это позволит вам добавить поля позже, добавив соответствующее поле в базу данных и HTML, не касаясь кода, и использовать array_keys () для получения представленных типов, чтобы обеспечить бесшовное добавление типов. Пока ваши проверки ограничены, это, вероятно, самый автоматизированный способ расширения в будущем ...

Ex. Имена полей:

contact[main][name]
contact[main][telephone]
...
contact[backup][email]

Ex. Код:

foreach(array_keys($request->input('contact')) as $type) {
    $contact = Contact::create($request->input('contact.'.$type));
    $contact->type = $type;
    $contact->save();
}
0 голосов
/ 03 июля 2018

Как ответили в комментариях, для этого измените метод вызова ввода и используйте саму фактическую функцию 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...