使用Laravel提交表格

时间:2018-06-02 18:35:19

标签: php laravel forms

我正在为帖子创建一个编辑页面。我宁愿创建一个html表单而不是使用FORM ::所以我真的可以学习。当我尝试将数据提交给正确的控制器方法时,我遇到了问题。

我正在使用的教程说使用

{!! Form::open(['action' => ['PostsController@update', $post->id], 'method' => 'POST'])!!}

利用我有限的知识,我试图将其重新创建为

<form action="{!! Route::post('/posts', ['PostsController@update', $post->id]) !!}" method="POST">

我正在使用<input name="_method" type="hidden" value="PUT">

我得到的错误是“

  

类Illuminate \ Routing \ Route的对象无法转换为   字符串(查看:   /Users/Chris/code/chris/resources/views/posts/edit.blade.php)

我的web.php文件有Route::resource('posts', 'PostsController');,直到现在才对其他所有内容起作用。在我的控制器中,我的更新方法有

public function update(Request $request, $id)
{
     $this->validate($request, [
        'title' => 'required',
        'body' => 'required'
    ]);
    // Create Post
    $post = Post::find($id);
    $post->title = $request->input('title');
    $post->body = $request->input('body');
    $post->save();

    return redirect('/')->with('success', 'Post Updated');
}

为我的信息提交更新的正确行动是什么?

提前非常感谢!

4 个答案:

答案 0 :(得分:1)

使用以下内容替换表单操作: 有很多解决方案:

1-使用行动方法:

 <form action=" {!! action('PostsController@update',$post->id) !!}" method="POST">

2-命名路线

<form action=" {!! route('route-name',$post->id) !!}" method="POST">

3-使用url方法

<form action=" {!! url('/posts',$post->id) !!}" method="POST">

答案 1 :(得分:0)

正如Lagbox在评论中指出的那样:

Route::post('/posts', ['PostsController@update', $post->id]) 

用于在路线文件中定义路线。要获取网址,您可以执行以下操作之一:

硬编码uri

action="/posts/{{ $post->id }}"

使用url()帮助

action="{{ url("posts/$post->id") }}"action="{{ url("post", $post->id) }}"

使用route()帮助(这只有在您为路线命名时才有效)

action="{{ route('the-route-name', $post->id) }}"

使用操作助手

action="{{ action('PostsController@update', $post->id) }}"

以下是各种网址助手的link。我在这里的主要建议是主要坚持只使用其中一个项目。

此外,您的代码应该以现在的方式运行,但通常使用REST(或Laravel使用休息的方式),您可以提出PUTPATCH更新请求而不是一个POST请求。 但是,标准html表单仅支持GETPOST,因此Laravel为您spoof the form method提供了一种方式:

<input type="hidden" name="_method" value="PUT" />

答案 2 :(得分:0)

非常感谢Lagbox。我用了

<form action=" {!! route('route-name',$post->id) !!}" method="POST">

它完美无缺!

答案 3 :(得分:0)

尝试一下 edit.blade.php文件

           <form  action="{{url('user', [$users->id])}}" method="POST">             
             @csrf
              @method('PUT')
                 <div class="kt-portlet__body">
                    <div class="form-group row">
                        <div class="col-lg-6">
                            <label>First Name:</label>
                            <input type="text" name="first_name" class="form- 
                                control" value="{{$users->first_name}}">
                                @error('first_name')
                            <strong class="invalid-feedback d-block">{{ $message 
                              }}</strong>
                            @enderror
                        </div>
                        <div class="col-lg-6">
                            <div class="form-group">
                                <label>Last Name:</label>
                                <input type="text" name="last_name" class="form- 
                        control" value="{{$users->last_name}}">
                                    @error('last_name')
                                <strong class="invalid-feedback d-block">{{ 
                        $message }}</strong>
                                @enderror
                            </div>
                        </div>   
                    </div>
                    <div class="form-group row">
                        <div class="col-lg-6">
                            <label>Password:</label>
                            <input type="password" name="password" class="form- 
                  control" id="password" value="{{$users->password}}">
                            @error('password')
                                <strong class="invalid-feedback d-block">{{ 
                    $message }}</strong>
                            @enderror
                        </div>
                        <div class="col-lg-6">
                            <div class="form-group">
                                <label>Confirm Password:</label>
                                <input type="password" 
                         name="password_confirmation" class="form-control" 
                   value="{{$users->password}}">
                                    @error('password_confirmation')
                                <strong class="invalid-feedback d-block">{{ 
                           $message }}</strong>
                                    @enderror
                            </div>
                        </div>   

                    </div>
                    <div class="form-group row">
                        <div class="col-lg-6">
                            <label>Email:</label>
                            <input type="text" name="email" class="form-control" 
                           value="{{$users->email}}">
                                @error('email')
                <strong class="invalid-feedback d-block">{{ $message }}</strong>
                                @enderror
                        </div>
                        <div class="col-lg-6">
                            <div class="form-group">
                                <label>Mobile:</label>
                                <input type="text" name="mobile_number" 
                 class="form-control" value="{{$users->mobile_number}}">
                                    @error('mobile_number')
                                <strong class="invalid-feedback d-block">{{ 
                            $message }}</strong>
                                    @enderror
                            </div>
                        </div>   

                    </div>
                </div>
                <div class="kt-portlet__foot">
                    <div class="kt-form__actions">
                        <div class="row">
                            <div class="col-lg-6">
                                <button type="submit" class="btn btn-brand" 
                   value="Update" >Update</button>
                                <a href="{{route('user.index')}}" class="btn btn- 
                           secondary">Cancel</a>
                            </div>
                        </div>
                    </div>
                </div>
               </form>
             </div>
            </div>
          </div>
         Routes=> web.php 
         Route::Resource('user','UsersController');