Как вывести кликабельную кнопку удаления, используя коллективы laravel в yajra datatables laravel 5.7 - PullRequest
0 голосов
/ 23 февраля 2019

Я хотел вывести нажимаемую кнопку удаления в другом столбце таблицы данных 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 ]

0 голосов
/ 25 февраля 2019

Я думаю, что коллектив 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() 
       ]);
    }
  }
0 голосов
/ 23 февраля 2019

Вот как я это делаю:

// 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.

...