Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉维形式模型绑定_Php_Forms_Laravel_Laravel 4_Eloquent - Fatal编程技术网

Php 拉维形式模型绑定

Php 拉维形式模型绑定,php,forms,laravel,laravel-4,eloquent,Php,Forms,Laravel,Laravel 4,Eloquent,我一直在阅读有关此功能的信息: 它看起来真的很整洁,但有几件事我不确定 我是否需要在控制器操作中放入任何代码来处理此表单?那是什么样子的 我想在表单中绑定的模型(用户)有一个单独的地址表。因此,我希望能够填写用户模型的字段,以及相关地址模型的字段。我可以通过表单模型绑定来实现这一点,还是必须手动处理表单 或者,如果失败,我可以对用户字段使用表单模型绑定,但手动处理地址字段吗?您不需要在控制器中使用任何不同的代码来处理此表单。所有(命名的)表单变量都将在Input::All()中 您传入的模型($

我一直在阅读有关此功能的信息:

它看起来真的很整洁,但有几件事我不确定

我是否需要在控制器操作中放入任何代码来处理此表单?那是什么样子的

我想在表单中绑定的模型(用户)有一个单独的地址表。因此,我希望能够填写用户模型的字段,以及相关地址模型的字段。我可以通过表单模型绑定来实现这一点,还是必须手动处理表单


或者,如果失败,我可以对用户字段使用表单模型绑定,但手动处理地址字段吗?

您不需要在控制器中使用任何不同的代码来处理此表单。所有(命名的)表单变量都将在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();
并将此组合模型传递给表单::model()

如何命名输入完全取决于您,因为您必须编写逻辑来处理表单。但是,在我看来,
users\u 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>
在稍微复杂一点的表单上,编码人员将不得不为其控制器添加更多的逻辑,在您的情况下,再进行一点研究,我认为您可以做到这一点:

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

    $inputs = Input::all();

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

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

        ...
    }

    ...
}

在Laravel 5.1中,对于关系模型绑定,您只需要加载关系表:

在视图中,将字段名称设置为数组:

{!! Form::model($user, ['route' => ['user.update', $user->id]]) !!}
    {!! Form::text('address[street]') !!}
    {!! Form::text('address[number]') !!}
{!! Form::close() !!}

那太圆滑了。那么,如何格式化字段名称属性中的属性名称呢?比如
users\u address.street
或者
users\u address[street]
或者其他方式?还有,如果我通过Auth:user()检索用户呢?我能做Auth:user()->leftJoin('users\u addresses','users.id','=','users\u addresses.user\u id')吗?dd()能生成那个漂亮的可折叠数组视图吗?以前从没见过。看起来不错,但可能更好。无论如何,我认为模型表单绑定在将字段保存到模型上方面起到了神奇的作用。文档介绍了如何使表单输入名称与模型的字段名称匹配。也许这只是为了填充字段?但是如果是这样的话,是否有一个标准可以遵循来获取要填充的地址字段?dd()来自Kint软件包,上面有一个链接。就我所知,对于简单的形式来说,形式模型有点神奇。刚刚添加了一个示例。您只需
$user->update(Input::all())
即可保存表单。Auth:user()已经是一个模型,我不确定您是否可以对其进行新的查询,但在Laravel中,通过所有这些注入,一切都是可能的。但是,您只需向您的用户模型添加一个新属性,并将其命名为$User->User\u with\u address,它将执行任何您需要的操作,以获得具有您的地址的用户。
$user = User::with(['address'])->find($id);
{!! Form::model($user, ['route' => ['user.update', $user->id]]) !!}
    {!! Form::text('address[street]') !!}
    {!! Form::text('address[number]') !!}
{!! Form::close() !!}