Как вывести кликабельную кнопку удаления, используя коллективы laravel в yajra datatables laravel 5.7
Я хотел вывести нажимаемую кнопку удаления в другом столбце таблицы данных yajra, используя коллективы laravel. Проблема в том, что он выводит необработанный 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>
2 ответа
Вот как я это делаю:
// 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
метод на Datatable.
Я думаю, что коллектив 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()
]);
}
}