Nie potrzebujesz żadnego innego kodu w swoim kontrolerze, aby przetworzyć ten formularz. Wszystkie zmienne formularza (nazwane) będą w Input :: all().
Model ($ user) przechodzą w
Form::model($user, array('route' => array('user.update', $user->id)))
Czy byle rekord trzeba, jeśli masz więcej niż jeden stół zaangażowany, musisz zrobić coś takiego
$user = User::where('id',$userID)
->leftJoin('users_addresses', 'users_addresses.user_id', '=', 'users.id')
->first();
I przekazać ten złożony model do formularza Form :: model().
To, jak określasz swoje dane wejściowe, należy wyłącznie do Ciebie, ponieważ musisz napisać logikę, aby przetworzyć formularz. Ale, moim zdaniem, users_address[street]
dla wejść adresów jest dobre, ponieważ otrzymasz tablicę adresów kolumn, które możesz od razu przekazać do swojego modelu 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>
A jeśli nie dd(Input::all())
w kontrolerze, dostaniesz coś takiego:
Wynik ten jest dostarczany przez kint za dd(): https://github.com/raveren/kint. Naprawdę pomocny.
Jeśli formularz po prostu pola z jednego modelu, metoda aktualizacji może być bardzo prosty i wyglądać mniej więcej tak:
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.');
}
Na form trochę bardziej skomplikowane, programiści będą musieli dodać więcej logiki ich kontrolerów, w ty etui z trochę więcej badań Myślę, że można tego dokonać:
public function update($id)
{
$user = User::find($id);
$inputs = Input::all();
if (!$user->update($inputs)) {
$address = new UserAddress($inputs['address']);
$user->address()->save($address);
...
}
...
}
to dość śliski. Jak sformatować nazwy właściwości w atrybutach nazw pól? Jak 'users_address.street' lub może' users_address [street] 'lub w inny sposób? – eimajenthat
Co się stanie, jeśli pobiorę użytkownika przez Auth: user()? Czy mogę wykonać polecenie Auth: user() -> leftJoin ("users_addresses", "users.id", "=", "users_addresses.user_id")? – eimajenthat
Czy dd() generuje ten ładny, zwijany widok tablicy? Nigdy wcześniej tego nie widziałem. Wygląda jak [krumo] (http://krumo.sourceforge.net/), ale może ładniej. W każdym razie, myślałem, że powiązanie formularza modelu zrobiło coś magicznego wokół zapisywania pól w modelu. Dokumenty mówią coś o nadawaniu nazwom wejściowym formularzy pasujących do nazw pól modelu. Może to tylko do zaludnienia pól? Ale jeśli tak, czy istnieje standard, który należy wykonać, aby wypełnić pola adresu? – eimajenthat