为了账号安全,请及时绑定邮箱和手机立即绑定

LARAVEL - 缺少必需的参数

LARAVEL - 缺少必需的参数

PHP
Qyouu 2021-11-26 15:42:21
我是编码新手,我一直在观看有关 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>
查看完整描述

3 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

在您的控制器中,您缺少第二个参数。


所以试试这样:


public function update(Request $request, Client $client)

    {

        $rules = array(

            'client_name'       =>  'required',

            'client_address'    =>  'required',

            'client_bdate'      =>  'required'

        );


        $error = Validator::make($request->all(), $rules);


        if($error->fails())

        {

            return response()->json(['errors'=>$error->errors()->all()]);

        }


        $form_data = array(

            'client_name'       =>  $request->client_name,

            'client_address'    =>  $request->client_address,

            'client_bdate'      =>  $request->client_bdate

        );

        // You should get your client in variable $client

        //Clients::find($request->hidden_id)->update($form_data);

        $client->update($form_data);


        return response()->json(['success' => 'Data Updated']);

    }

另请注意,如果您想让您的代码看起来更简单,您可以像这样验证您的请求:


public function update(Request $request, Client $client)

    {

        $request->validate([

            'client_name'       =>  'required',

            'client_address'    =>  'required',

            'client_bdate'      =>  'required'

        ])

        $client->update($form_data);


        return response()->json(['success' => 'Data Updated']);

    }

您可以在此处阅读更多内容。


祝你好运!


查看完整回答
反对 回复 2021-11-26
?
FFIVE

TA贡献1797条经验 获得超6个赞

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



查看完整回答
反对 回复 2021-11-26
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

首先,让我们制定一些约定。


将您的路线定义更改为


Route::resource('clients', 'ClientsCont');

按照惯例,控制器名称应该是驼峰式大小写并以大写字母开头。路由名称通常是小写的。


接下来,确保您的控制器文件命名正确ClientsCont.php,并且类名也应该是ClientsCont. 最后,您必须为您的update()方法提供第二个参数以保存要更新的客户端对象。


客户端连接.php


namespace App\Http\Controllers;

use App\Client;


class ClientsCont extends Controller

{

    // class definition


    public function update(Request $request, Client $client)

    {

        $rules = array(

            'client_name'       =>  'required',

            'client_address'    =>  'required',

            'client_bdate'      =>  'required'

        );


        $error = Validator::make($request->all(), $rules);


        if($error->fails())

        {

            return response()->json(['errors'=>$error->errors()->all()]);

        }


        $form_data = array(

            'client_name'       =>  $request->client_name,

            'client_address'    =>  $request->client_address,

            'client_bdate'      =>  $request->client_bdate

        );


        $client->update($form_data);


        return response()->json(['success' => 'Data Updated']);


    }

}

现在,正确设置您的 Ajax 请求。


$('#client_form').on('submit', function(event){

    var url;

    if($('#action').val() == 'Add')

    {

        url = "{{ route('clients.store') }}";

    }else{

        url = "{{ route('clients.update') }}";

    }

    $.ajax({

        url: url,

        method: "POST",

        data: new FormData(this),

        cache: false,

        dataType: "json",

        success:function(data)

        {

            var html = '';

            if(data.errors)

            {

                html = '<diV class="alert alert-danger">';

                for(var count = 0; count < data.errors.length; count++)

                {

                    html += '<p>' + data.errors[count] + '</p>';

                }

                html += '</div>';

            }

            if(data.success)

            {

                alert("add");

                html = '<diV class="alert alert-success">' + data.success + '</div>';

                $('#client_form')[0].reset();

                $('#table_id').DataTable().ajax.reload();

            }

            $('#result').html(html);

        }

    })

    return false;

});

通常使用return false;是停止默认事件操作和传播的首选方式。


[return false;]通常出现在 jQuery 代码中,它阻止浏览器的默认行为,阻止事件冒泡 DOM,并立即从任何回调返回。


有关完整详细信息,请参阅此媒体文章。


此外,从您的代码中,您的某些 ajax 设置是不必要的,应该省略,以便使用它们的默认值。对于大多数表单,这些默认值通常就足够了。


例如,使用jQuery Ajax 设置processData: false禁用处理表单数据并使用toString()对象的方法来形成请求数据字符串。


当您将数据设置为除 processData 设置为 false 的字符串以外的常规对象时,jQuery 不会处理该对象。该对象完全按原样传递给 Ajax 调用,并像字符串一样使用。这默认调用 toString 方法并将结果作为 Ajax 请求中的数据发送到服务器。


见这对完整的描述。确保您需要此设置,否则将其全部丢弃。


您可能需要放弃的另一个 Ajax 设置是contentType: false,除非您有充分的理由进行设置。


查看完整回答
反对 回复 2021-11-26
  • 3 回答
  • 0 关注
  • 258 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信