Sie benötigen keinen anderen Code in Ihrem Controller, um dieses Formular zu verarbeiten. Alle Ihre (benannten) Formularvariablen werden in Input :: all() stehen.
Das Modell ($ user) übergeben Sie in
Form::model($user, array('route' => array('user.update', $user->id)))
Ist irgendein Datensatz, den Sie müssen, wenn Sie mehr als eine Tabelle beteiligt haben, werden Sie etwas wie
$user = User::where('id',$userID)
->leftJoin('users_addresses', 'users_addresses.user_id', '=', 'users.id')
->first();
zu tun haben
Und übergeben Sie dieses zusammengesetzte Modell an Ihr Form :: model().
Wie Sie Ihre Eingaben benennen, liegt ganz bei Ihnen, weil Sie die Logik schreiben müssen, um Ihr Formular zu verarbeiten. Aber meiner Meinung nach users_address[street]
für die Adresseingänge ist gut, weil Sie am Ende mit einem Array von Adressen Spalten, die Sie sofort an Ihr UserAddress-Modell übergeben können.
<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>
Und wenn Sie dd(Input::all())
in Ihrem Controller tun, werden Sie so etwas wie dieses:
Dieses Ergebnis wird durch Kint des dd vorgesehen ist(): https://github.com/raveren/kint. Wirklich hilfreich.
Wenn Ihr Formular nur Felder von einem einzigen Modell, können Sie Ihre Update-Methode sehr einfach sein und in etwa so aussehen:
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.');
}
Auf Formen ein wenig komplexer, werden Programmierer müssen mehr Logik in den die Steuerungen, in denen Sie ein bisschen mehr Forschung Fall, dass ich denke, man kann damit dies geschieht:
public function update($id)
{
$user = User::find($id);
$inputs = Input::all();
if (!$user->update($inputs)) {
$address = new UserAddress($inputs['address']);
$user->address()->save($address);
...
}
...
}
Das ziemlich glatt ist. Wie formatiere ich die Eigenschaftsnamen in den Namensattributen der Felder? Wie 'user_address.street' oder vielleicht' users_address [street] 'oder anders? – eimajenthat
Was auch, wenn ich den Benutzer mit Auth: user() abgerufen habe? Könnte ich Auth: user() -> leftJoin ('users_addresses', 'users.id', '=', 'users_addresses.user_id')? – eimajenthat
Erzeugt dd() diese nette zusammenklappbare Array-Ansicht? Nie zuvor gesehen. Sieht aus wie [krumo] (http://krumo.sourceforge.net/), aber möglicherweise schöner. Auf jeden Fall dachte ich, dass die Bindung der Modellform etwas Magisches daran machte, die Felder im Modell zu speichern. Die Dokumentation sagt etwas darüber aus, dass Ihre Formular-Eingabenamen mit den Feldnamen des Modells übereinstimmen. Vielleicht nur um die Felder zu bevölkern? Aber wenn das der Fall ist, gibt es einen Standard, um die Adressfelder zu füllen? – eimajenthat