【问题标题】:Submitting a Form with Laravel使用 Laravel 提交表单
【发布时间】:2018-11-12 13:46:07
【问题描述】:

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

我正在使用的教程说要使用

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

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

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

在下面我都在使用&lt;input name="_method" type="hidden" value="PUT"&gt;

我得到的错误是`"

类 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');
}

为我的信息提交更新的正确操作是什么?

提前非常感谢!

【问题讨论】:

  • Route::post 用于定义路由,而不是获取路由路径,您只是定义了一个新路由并返回一个Route 对象,然后您尝试回显该对象。
  • 你使用的是什么版本的 Laravel?

标签: php laravel forms


【解决方案1】:

正如 Lagbox 在 cmets 中指出的那样:

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

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

对 uri 进行硬编码

action="/posts/{{ $post-&gt;id }}"

使用url() 助手

action="{{ url("posts/$post-&gt;id") }}"action="{{ url("post", $post-&gt;id) }}"

使用 route() 助手(这只有在你给路由命名后才有效)

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

使用动作助手

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

这里是一个link 给各种 url 助手。我的主要建议是主要坚持只将其中一个用于项目。


此外,您的代码现在应该可以正常工作,但通常使用 REST(或 Laravel 使用 REST 的方式)您会发出 PUTPATCH 更新请求,而不是 POST要求。 但是,标准的 html 表单只支持GETPOST,所以 Laravel 为您提供了spoof the form method 的方法:

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

【讨论】:

    【解决方案2】:

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

    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">
    

    【讨论】:

      【解决方案3】:

      非常感谢 Lagbox。我用过

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

      而且效果很好!

      【讨论】:

        【解决方案4】:

        试试这个 编辑.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');
        
             
        

        【讨论】:

          猜你喜欢
          • 2021-01-13
          • 2015-02-05
          • 2020-03-25
          • 2021-09-05
          • 2018-01-18
          • 2016-12-16
          • 1970-01-01
          • 1970-01-01
          • 2020-02-25
          相关资源
          最近更新 更多