我想使用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>
答案 0 :(得分:0)
这是我的方法:
// 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输出。
另一建议是将Admin检查从JS代码移到控制器中,您可以使用数据表上的editColumn
方法。
答案 1 :(得分:0)
我认为Laravel Collector适用于刀片服务器,因此无需将其放在控制器上。简单地:-
seller No # 1