Для обработки этой формы вам не нужен какой-либо другой код в контроллере. Все ваши (названные) переменные формы будут в Input :: all().
Модель ($ пользователю) вы передаете в
Form::model($user, array('route' => array('user.update', $user->id)))
Есть только какая-либо запись вам нужно, если у вас есть более чем одна таблица, вы должны сделать что-то вроде
$user = User::where('id',$userID)
->leftJoin('users_addresses', 'users_addresses.user_id', '=', 'users.id')
->first();
И передать эту скомпонованную модель в форму :: model().
Как вы называете свои входы полностью зависит от вас, потому что вам нужно будет написать логику для обработки вашей формы. Но, на мой взгляд, users_address[street]
для адресных входов является хорошим, потому что вы получите массив столбцов адресов, которые вы можете передать сразу в свою модель UserAddress.
<html>
<head>
<title></title>
</head>
<body>
{{ Form::model($user, array('route' => array('user.update', $user->id))) }}
{{ Form::label('first_name', 'First Name:', array('class' => 'address')) }}
{{ Form::text('first_name') }}
{{ Form::label('last_name', 'Last Name:', array('class' => 'address')) }}
{{ Form::text('last_name') }}
{{ Form::label('email', 'E-Mail Address', array('class' => 'address')) }}
{{ Form::text('email') }}
{{ Form::label('address[street1]', 'Address (Street 1)', array('class' => 'address')) }}
{{ Form::text('address[street1]') }}
{{ Form::label('address[street2]', 'Address (Street 2)', array('class' => 'address')) }}
{{ Form::text('address[street2]') }}
{{ Form::label('ddress[city]', 'City', array('class' => 'address')) }}
{{ Form::text('address[city]') }}
{{ Form::label('address[state]', 'State', array('class' => 'address')) }}
{{ Form::text('address[state]') }}
{{ Form::label('address[zip]', 'Zip Code', array('class' => 'address')) }}
{{ Form::text('address[zip]') }}
{{ Form::submit('Send this form!') }}
{{ Form::close() }}
</body>
</html>
И если вы dd(Input::all())
в контроллере, вы получите что-то вроде этого:
Этот результат предоставляется Д.Д. Kint (в): https://github.com/raveren/kint. Действительно полезно.
Если ваша форма просто поля из одной модели, ваш метод обновления может быть очень простой и выглядеть примерно так:
public function update($id)
{
$user = User::find($id);
if (!$user->update(Input::all())) {
return Redirect::back()
->with('message', 'Something wrong happened while saving your model')
->withInput();
}
return Redirect::route('user.saved')
->with('message', 'User updated.');
}
О формах немного более сложным, кодеры придется добавить больше логики в их контроллеры, у вас в случае с немного больше исследований, я думаю, что вы можете сделать это случиться:
public function update($id)
{
$user = User::find($id);
$inputs = Input::all();
if (!$user->update($inputs)) {
$address = new UserAddress($inputs['address']);
$user->address()->save($address);
...
}
...
}
Это довольно скользким. Итак, как мне форматировать имена свойств в атрибутах атрибутов полей? Как 'users_address.street' или, может быть,' users_address [street] 'или каким-либо другим способом? – eimajenthat
Также, если я получил пользователя Auth: user()? Могу ли я сделать Auth: user() -> leftJoin ('users_addresses', 'users.id', '=', 'users_addresses.user_id')? – eimajenthat
Создает ли dd() этот красивый складной массив? Никогда не видел этого раньше. Похож на [krumo] (http://krumo.sourceforge.net/), но, возможно, лучше. Во всяком случае, я думал, что привязка формы модели сделала что-то волшебное, сохранив поля в модели. Документы говорят что-то о том, чтобы ваши имена ввода формы совпадали с именами полей модели. Может быть, это просто для заполнения полей? Но если это так, существует ли стандарт для заполнения полей адреса? – eimajenthat