【问题标题】:How to send parameters from datatable to controller Laravel如何将参数从数据表发送到控制器 Laravel
【发布时间】:2021-05-17 12:57:05
【问题描述】:

我的刀片视图 Laravel 中有一个数据表,我用户单击蓝色按钮,它将打开新页面并显示与之前单击的 user_id 相同的所有任务

我正在尝试将 user_id 值传递给控制器​​。我已经按照以下代码执行此操作

我的路线

 Route::get('/detail/{user_id}', [PageController::class, 'UserTask'])->name('user.task');

刀片文件中我的数据表代码

 $(function() {
        var user_id = $(this).data('user_id'); //have different value from each rows
        $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            }
        });

        var table = $('.data-table').DataTable({
            processing: true,
            serverSide: true,
            ajax: "{{ route('user.task') }}" + '/' + user_id,

            columns: [{
                    data: 'DT_RowIndex',
                    name: 'DT_RowIndex',
                    orderable: false,
                    searchable: false,
                },
                {
                    data: 'title',
                    name: 'title',
                    orderable: false,
                },
                {
                    data: 'content',
                    name: 'content',
                    orderable: false,
                    visible: false,
                },
                {
                    data: 'progress',
                    name: 'progress'
                },
                {
                    data: 'status',
                    name: 'status'
                },
                {
                    data: 'target_selesai',
                    name: 'target_selesai'
                },
                {
                    data: 'action',
                    name: 'action',
                    orderable: false,
                    searchable: false
                },
            ]
        });
    });

我的控制器

  public function UserTask($user_id)
    {


        $data = Post::where('user_id', $user_id)->latest()->get();
        return Datatables::of($data)
            ->addIndexColumn()
            ->addColumn('action', function ($row) {
                $id = $row->id;
                // $this->actionButton($row->id);
                $btn = ' <a href="javascript:void(0)" data-toggle="tooltip"  data-id="' . $id . '" data-original-title="Detail" class="btn btn-success mr-1 btn-sm detailProduct"><span class="fas fa-info"></span></a>';

                return $btn;
            })->addColumn('target_selesai', function ($row) {
                //...
            })
            ->addColumn('progress', function ($row) {
                //...
            })->addColumn('status', function ($row) {
               //...
            })
            ->rawColumns(['action', 'progress', 'status'])
            ->make(true);


        return view('detail');
    }

但是,它会返回错误Missing required parameter for [Route: user.task] 如果我从路由、ajax 路由中删除所有参数 {user_id},并更改

 public function UserTask($user_id)
    {
        $data = Post::where('user_id', $user_id)->latest()->get();

进入

public function UserTask()
    {
        $data = Post::where('user_id', 1000000002)->latest()->get();

该程序将完美运行,我如何将 user_id 值从数据表传递到控制器?

【问题讨论】:

    标签: ajax laravel datatable datatables laravel-8


    【解决方案1】:

    当您尝试在客户端更改路由时,您不能使用"{{ route('user.task') }}" + '/' + user_id,因为route() 函数会在服务器中呈现路由。通过 ajax 作为数据发送user_id 并使用request()-&gt;get('user_id') 检索它

    【讨论】:

    • 如何使用 ajax 将 user_id 作为数据发送?
    • 检查this
    • 我得到了这个 ajax: { "type": "POST", "url": "{{ route('user.task') }}", "data": { myData: 'This是我的数据。 },我应该用什么来替换data{ }里面的东西?
    • data:{ user_id: user_id }
    • 错误消失,但我的数据表没有显示任何数据。我该怎么办?
    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2016-04-03
    • 2016-11-07
    • 2017-03-11
    • 2021-04-07
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多