猿问

LARAVEL - 缺少必需的参数

我是编码新手,我一直在观看有关 Laravel 中一个简单的服务器端处理 crud 和数据表的 youtube 教程,我收到了这个错误,我不知道为什么我会得到它。


我正在尝试为我的代码创建一个更新函数,但不能因为这个错误。我有一种感觉,这是因为我的更新网址,但我在教程中使用了相同的语法,所以你能帮助我吗?


缺少 [Route: Clients.update] [URI: Clients/{Client}] 的必需参数。(查看:C:\xampp\htdocs\project\resources\views\clients\clients.blade.php)


这是我的视图代码


<div id="formmodal" class="modal fade" role="dialog">

  <div class="modal-dialog modal-lg">

    <div class="modal-content">

        <div class="modal-header">

            <h5 class="modal-title" id="exampleModalLabel">Client Form</h5>

            <button type="button" class="close" data-dismiss="modal" aria-label="Close">

                <span aria-hidden="true">&times;</span>

            </button>

        </div>{{-- header --}}

            <div class="modal-body">

                <span class="result" id="result"></span>

                <form method="post" id="client_form" enctype="multipart/form-data">

                    @csrf

                    <div class="form-group">

                        <label for="client_name">Name</label>

                        <input type="text" class="form-control" name="client_name" id="client_name" placeholder="Enter Name">

                    </div>

                    <div class="form-group">

                        <label for="client_address">Addres</label>

                        <input type="text" class="form-control" name="client_address" id="client_address" placeholder="Enter Addres">

                    </div>

                    <div class="form-group">

                        <label for="client_date">Birth Date</label>

                        <input type="date" class="form-control" name="client_bdate" id="client_bdate">

                    </div>

                </div>

                </form>

            </div>

    </div>

  </div>

</div>


Qyouu
浏览 259回答 3
3回答

千万里不及你

在您的控制器中,您缺少第二个参数。所以试试这样:public function update(Request $request, Client $client)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $rules = array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_name'&nbsp; &nbsp; &nbsp; &nbsp;=>&nbsp; 'required',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_address'&nbsp; &nbsp; =>&nbsp; 'required',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_bdate'&nbsp; &nbsp; &nbsp; =>&nbsp; 'required'&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; &nbsp; &nbsp; $error = Validator::make($request->all(), $rules);&nbsp; &nbsp; &nbsp; &nbsp; if($error->fails())&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return response()->json(['errors'=>$error->errors()->all()]);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; $form_data = array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_name'&nbsp; &nbsp; &nbsp; &nbsp;=>&nbsp; $request->client_name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_address'&nbsp; &nbsp; =>&nbsp; $request->client_address,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_bdate'&nbsp; &nbsp; &nbsp; =>&nbsp; $request->client_bdate&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; &nbsp; &nbsp; // You should get your client in variable $client&nbsp; &nbsp; &nbsp; &nbsp; //Clients::find($request->hidden_id)->update($form_data);&nbsp; &nbsp; &nbsp; &nbsp; $client->update($form_data);&nbsp; &nbsp; &nbsp; &nbsp; return response()->json(['success' => 'Data Updated']);&nbsp; &nbsp; }另请注意,如果您想让您的代码看起来更简单,您可以像这样验证您的请求:public function update(Request $request, Client $client)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $request->validate([&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_name'&nbsp; &nbsp; &nbsp; &nbsp;=>&nbsp; 'required',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_address'&nbsp; &nbsp; =>&nbsp; 'required',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_bdate'&nbsp; &nbsp; &nbsp; =>&nbsp; 'required'&nbsp; &nbsp; &nbsp; &nbsp; ])&nbsp; &nbsp; &nbsp; &nbsp; $client->update($form_data);&nbsp; &nbsp; &nbsp; &nbsp; return response()->json(['success' => 'Data Updated']);&nbsp; &nbsp; }您可以在此处阅读更多内容。祝你好运!

FFIVE

在您的路由文件中删除 {}Clients/{Client}或最好将其更改为:Clients/update,当您将 {} 放在一些文本周围时,您正在绑定一些参数(实际上是 Eloquent 模型),并且您应该在调用时提供它(提供 ID)路线。

Cats萌萌

首先,让我们制定一些约定。将您的路线定义更改为Route::resource('clients', 'ClientsCont');按照惯例,控制器名称应该是驼峰式大小写并以大写字母开头。路由名称通常是小写的。接下来,确保您的控制器文件命名正确ClientsCont.php,并且类名也应该是ClientsCont. 最后,您必须为您的update()方法提供第二个参数以保存要更新的客户端对象。客户端连接.phpnamespace App\Http\Controllers;use App\Client;class ClientsCont extends Controller{&nbsp; &nbsp; // class definition&nbsp; &nbsp; public function update(Request $request, Client $client)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; $rules = array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_name'&nbsp; &nbsp; &nbsp; &nbsp;=>&nbsp; 'required',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_address'&nbsp; &nbsp; =>&nbsp; 'required',&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_bdate'&nbsp; &nbsp; &nbsp; =>&nbsp; 'required'&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; &nbsp; &nbsp; $error = Validator::make($request->all(), $rules);&nbsp; &nbsp; &nbsp; &nbsp; if($error->fails())&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return response()->json(['errors'=>$error->errors()->all()]);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; $form_data = array(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_name'&nbsp; &nbsp; &nbsp; &nbsp;=>&nbsp; $request->client_name,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_address'&nbsp; &nbsp; =>&nbsp; $request->client_address,&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'client_bdate'&nbsp; &nbsp; &nbsp; =>&nbsp; $request->client_bdate&nbsp; &nbsp; &nbsp; &nbsp; );&nbsp; &nbsp; &nbsp; &nbsp; $client->update($form_data);&nbsp; &nbsp; &nbsp; &nbsp; return response()->json(['success' => 'Data Updated']);&nbsp; &nbsp; }}现在,正确设置您的 Ajax 请求。$('#client_form').on('submit', function(event){&nbsp; &nbsp; var url;&nbsp; &nbsp; if($('#action').val() == 'Add')&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; url = "{{ route('clients.store') }}";&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; url = "{{ route('clients.update') }}";&nbsp; &nbsp; }&nbsp; &nbsp; $.ajax({&nbsp; &nbsp; &nbsp; &nbsp; url: url,&nbsp; &nbsp; &nbsp; &nbsp; method: "POST",&nbsp; &nbsp; &nbsp; &nbsp; data: new FormData(this),&nbsp; &nbsp; &nbsp; &nbsp; cache: false,&nbsp; &nbsp; &nbsp; &nbsp; dataType: "json",&nbsp; &nbsp; &nbsp; &nbsp; success:function(data)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var html = '';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(data.errors)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html = '<diV class="alert alert-danger">';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var count = 0; count < data.errors.length; count++)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html += '<p>' + data.errors[count] + '</p>';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html += '</div>';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(data.success)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; alert("add");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; html = '<diV class="alert alert-success">' + data.success + '</div>';&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#client_form')[0].reset();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#table_id').DataTable().ajax.reload();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; $('#result').html(html);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; })&nbsp; &nbsp; return false;});通常使用return false;是停止默认事件操作和传播的首选方式。[return false;]通常出现在 jQuery 代码中,它阻止浏览器的默认行为,阻止事件冒泡 DOM,并立即从任何回调返回。有关完整详细信息,请参阅此媒体文章。此外,从您的代码中,您的某些 ajax 设置是不必要的,应该省略,以便使用它们的默认值。对于大多数表单,这些默认值通常就足够了。例如,使用jQuery Ajax 设置processData: false禁用处理表单数据并使用toString()对象的方法来形成请求数据字符串。当您将数据设置为除 processData 设置为 false 的字符串以外的常规对象时,jQuery 不会处理该对象。该对象完全按原样传递给 Ajax 调用,并像字符串一样使用。这默认调用 toString 方法并将结果作为 Ajax 请求中的数据发送到服务器。见这对完整的描述。确保您需要此设置,否则将其全部丢弃。您可能需要放弃的另一个 Ajax 设置是contentType: false,除非您有充分的理由进行设置。
随时随地看视频慕课网APP
我要回答