【问题标题】:How to output a clickable delete button using laravel collectives in yajra datatables laravel 5.7如何在 yajra 数据表 laravel 5.7 中使用 laravel 集合输出可点击的删除按钮
【发布时间】:2019-07-17 06:38:16
【问题描述】:

我想使用 laravel 集合在 yajra 数据表的另一列上输出一个可点击的删除按钮。问题是它在视图中输出原始 html 文本 {!! Form::open(["action" => ["UsersController@destroy",28], "method" => "POST", "class" => "pull-right"]) !!} {{ Form::hidden("_method", "DELETE") }} {{ Form::submit("Delete", ["class" => "btn btn-danger"]) }} {!! Form::close()!!}") 而不是可点击的删除按钮。我可以输出常规的 html 标签,但我想使用 laravel 集合。我很困惑为什么即使我已经添加了rawColumns() 函数它也不起作用。

这是我的控制器:

public function yajraDT()
{
    $users = User::all();
    return Datatables::of($users)
    ->addColumn('delete', function ($users) {
            return '{!! Form::open(["action" => ["UsersController@destroy",'.$users->id.'], "method" => "POST", "class" => "pull-right"]) !!}
            {{ Form::hidden("_method", "DELETE") }}
            {{ Form::submit("Delete", ["class" => "btn btn-danger"]) }}
            {!! Form::close()!!}")';
    })
    ->rawColumns(['delete'])
    ->make(true);
}

这是我的看法:

<script>
     $(function() {
           $('#tableDT').DataTable({
           processing: true,
           serverSide: true,
           ajax: '{{ url('users/yajraDT') }}',
           columns: [
                    { data: 'id', name: 'id', 
                        @if(Auth::check() && Auth::user()->type == "Admin")
                            render:function(data, type, row)
                            {
                                return "<a href='/users/"+ row.id +"'>" + row.id + "</a>"
                            }
                        @endif},
                    { data: 'first_name', name: 'first_name' },
                    { data: 'last_name', name: 'last_name' },
                    { data: 'email', name: 'email' },
                    { data: 'gender', name: 'gender' },
                    {data: 'delete', name: 'delete'}
                 ]
        });
     });
</script>

【问题讨论】:

    标签: jquery laravel datatables laravel-5.7 yajra-datatable


    【解决方案1】:

    这就是我的做法:

    // in the controller
    
    return Datatables::of($users)
        ->addColumn('delete', function ( $user ) {
            return view('user.delete', compact('user'))->render();
        })
        ->escapeColumns([])
        ->make();
    
    

    然后你的delete.blade.php

    {!! Form::open(["action" => ["UsersController@destroy", $user->id], "method" => "POST", "class" => "pull-right"]) !!}
        {{ Form::hidden("_method", "DELETE") }}
        {{ Form::submit("Delete", ["class" => "btn btn-danger"]) }}
    {!! Form::close()!!}
    

    这样你的控制器中没有硬编码的 HTML,你可以在显示之前渲染 html 输出。

    另一个建议是将您的管理员检查从 JS 代码移到您的控制器中,您可以在数据表上使用 editColumn 方法。

    【讨论】:

    • 但这意味着它必须重定向到另一个页面,对吧?有没有办法让它不重定向到另一个页面?我希望它不会重定向到另一个页面。
    • 这个删除按钮是数据表中的另一列,而不是新页面。
    • 它不会重定向,它将呈现需要在每个数据表行中输出的 html。试试看吧。
    • 好的,谢谢,我一回家就试试。
    • 我试过了,但它输出的是原始 html 文本,而不是可点击的删除按钮。
    【解决方案2】:

    我认为 laravel 集合是用于刀片的,所以不需要把它放在控制器上。简单地说:-

    public function yajraDT()
    {
        $users = User::all();
        return Datatables::of($users)
        ->addColumn('delete', function (User $users) {
                return '<a href="admin/user/'.$users->id.'></a>';
        })
        ->rawColumns(['delete'])
        ->make(true);
    }
    
    //ROUTE Start
    Route::get('admin/user/delete/{id},'Users@destroy');
    //ROUTE End
    
    //Remove User
    public function destroy($id){
     try{
          User::where('id',$id)->delete();
          return back()->with([
          'message'  => 'User removed successfully."
         ]);
        }catch(Exception $e){
           return back()->with([
              'message' => $e->getMesssage() 
           ]);
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2019-07-15
      • 2019-03-29
      • 2023-03-05
      • 2021-11-24
      • 2016-09-04
      • 2019-05-08
      • 2016-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多