Можно ли получить ключи от входов синтаксиса массива Laravel? - PullRequest
0 голосов
/ 26 июня 2018

Предоставляется форма в формате:

<form method="POST" action="{{ route('post') }}">
{{ csrf_field() }}
@foreach([
    'firstname' => 'First name',
    'lastname' => 'Last name',
] as $key => $label)
    <label for="person[{{ $key }}]">{{ $label }}</label>
    <input name="person[{{ $key }}]" id="person[{{ $key }}]" type="text" />
@endforeach
<input type="submit" value="Send" />
</form>

И модель:

use Illuminate\Database\Eloquent\Model;

class Person extends Model
{
    protected $fillable = [
        'firstname',
        'lastname',
    ];
}

Я бы хотел использовать функцию Laravel Illuminate\Http\Request::input() для извлечения всех полей person из формы и заполнения модели из нее.

Пример маршрута, который я использовал для проверки этой функциональности:

use Illuminate\Http\Request;
use App\Person;

Route::post('/testcase', function(Request $request) {
    $person = new Person;
    $fields = $request->input('person.*');
    $person->fill($fields);
    var_dump(
        $person->firstname,
        $person->lastname,
        $fields
    );
    return response('');
})->name('post');

Однако возвращается следующий ответ:

NULL
NULL
array(2) {
[0]=>
string(4) "John"
[1]=>
string(3) "Doe"
}

(где форма была заполнена значениями "firstname" => "John" и "lastname" => "Doe")

Можно ли получить входные данные массива из этой формы с соответствующими им ключами («имя» и «фамилия») вместо цифровых клавиш, или мне придется указывать все ключи вручную?

1 Ответ

0 голосов
/ 26 июня 2018

Измените способ доступа к входу на

$fields = $request->input("person");

Вы должны получить

array:2 [▼
  "firstname" => "John"
  "lastname" => "Doe"
]

У вас не должно возникнуть проблем с заполнением этих полей этой логикой. Если вы пытаетесь создать несколько человек в одном посте, вам нужно использовать дополнительный индекс в вашей форме:

<form method="POST" action="">
  {{ csrf_field() }}
  @foreach(['firstname' => 'First Name', 'lastname' => 'Last Name'] as $key => $label)
  <label for="person[0][{{ $key }}]">{{ $label }}</label>
  <input name="person[0][{{ $key }}]" id="person[0][{{ $key }}]" type="text" />
  @endforeach
  <input type="submit" value="Send" />
</form>

И на бэкэнде, в цикле, доступ как:

for($request->input("person") AS $index => $fields){
  $person = new Person;
  $person->fill($fields);
}

// OR

$fields = $request->input("person.0");
$person = new Person;
$person->fill($fields);

Вам понадобится способ поддерживать индексы на интерфейсе при динамическом создании полей, но это другая проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...