gpt4 book ai didi

php - Laravel 表单模型绑定(bind)

转载 作者:IT王子 更新时间:2023-10-29 01:24:28 24 4
gpt4 key购买 nike

我一直在阅读有关此功能的信息:http://laravel.com/docs/html#form-model-binding

它看起来非常整洁,但有几件事我不确定。

我是否需要在 Controller 操作中添加任何代码来处理此表单?那看起来像什么?

我想在我的表单中绑定(bind)的模型(用户)有一个单独的地址表。所以我希望能够填写用户模型的字段,以及相关地址模型的字段。我可以使用表单模型绑定(bind)来做到这一点,还是必须手动处理表单?

或者,如果做不到,我可以对用户字段使用表单模型绑定(bind),但手动处理地址字段吗?

最佳答案

您不需要在 Controller 中添加任何不同的代码来处理此表单。您所有的(命名的)表单变量都将在 Input::all() 中。

你传入的模型($user)

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();

并将这个组合模型传递给您的 Form::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>

如果你在你的 Controller 中执行 dd( Input::all() ),你会得到这样的东西:

This is the Input::all() result此结果由 Kint 的 dd() 提供: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.');
}

在稍微复杂一点的表单上,编码人员将不得不向他们的 Controller 添加更多逻辑,在你的情况下,通过更多的研究,我认为你可以做到这一点:

public function update($id)
{
$user = User::find($id);

$inputs = Input::all();

if (!$user->update($inputs)) {
$address = new UserAddress($inputs['address']);

$user->address()->save($address);

...
}

...
}

关于php - Laravel 表单模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16873638/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com