Используя Laravel 5.6, в настоящее время мы пишем API, который будет принимать входные данные из различных источников. Некоторые источники ожидают передачи данных определенным образом, кроме остальных. Мне бы хотелось, чтобы наш API был максимально гибким, поэтому мы готовы принять более одного имени для поля.
Например, если мы сохраним имя в нашей таблице, мы сохраним его как first_name. Однако некоторые API могут передать его как имя или даже имя.
Я могу (и в настоящее время являюсь) на входе, проверяя наличие других имен полей, и, если они существуют, копируя содержимое другого имени поля в ожидаемое имя поля.
Вот грубый пример (не совсем то, как мы это делаем, но достаточно близко):
if (Input::has('firstname')) {
Input::merge(['first_name'=>Input::get('firstname')]);
}
Как видите, это довольно грязно, а сверхурочные работы могут привести к проблемам и стать громоздкими.
Один из вариантов, который помогает, особенно для столбцов с несколькими возможными именами, - сделать что-то вроде следующего:
$first_names = ['firstname', 'firstName', 'name1'];
foreach ($first_names as $name) {
if (Input::has($name)) {
Input::merge(['firstname'=>$name]);
break;
}
}
Я не вижу каких-либо методов, которые могли бы сделать это намного проще (мы можем даже обернуть его вокруг него, чтобы мы могли передать массив возможных имен и ожидаемое имя поля), однако всегда можно пропустить гораздо проще решение или не знать о определенной функциональности.
Есть ли более простой / более надежный способ сделать это?