Laravel-datatables: [7.0] Não renderiza HTML

Criado em 27 jan. 2017  ·  18Comentários  ·  Fonte: yajra/laravel-datatables

Estou usando o Laravel Datatables 7, mas minha tabela não está renderizando código HTML. Ele estava renderizando HTML antes, mas quando atualizei para o novo Laravel DataTables para 7 de 6, ele parou de renderizar HTML na coluna. http://prntscr.com/e11n84

Isso é com Laravel DataTables 6 - http://prntscr.com/e11ph0

Comentários muito úteis

    return Datatables::of($this->users->getForDataTable($request->get('status'), $request->get('trashed')))
        ->editColumn('confirmed', function ($user) {
            return $user->confirmed_label;
        })
        ->addColumn('roles', function ($user) {
            return $user->roles->count() ?
                implode('<br/>', $user->roles->pluck('name')->toArray()) :
                trans('labels.general.none');
        })
        ->addColumn('actions', function ($user) {
           return $user->action_buttons;
        })
        ->rawColumns(['actions', 'confirmed'])
        ->withTrashed()
        ->make(true);

Todos 18 comentários

Os resultados são escapados por padrão na v7. Ainda não documentamos todas as mudanças importantes, mas o log de mudanças deve fornecer algumas pistas. Obrigado!

Como posso corrigir o mesmo problema, mas em serviço?

@brian2694 use o novo método ->rawColumns(['column_with_html']) .

Eu tenho problema semelhante, algum exemplo para usar o rawColumns ?

    return Datatables::of($this->users->getForDataTable($request->get('status'), $request->get('trashed')))
        ->editColumn('confirmed', function ($user) {
            return $user->confirmed_label;
        })
        ->addColumn('roles', function ($user) {
            return $user->roles->count() ?
                implode('<br/>', $user->roles->pluck('name')->toArray()) :
                trans('labels.general.none');
        })
        ->addColumn('actions', function ($user) {
           return $user->action_buttons;
        })
        ->rawColumns(['actions', 'confirmed'])
        ->withTrashed()
        ->make(true);

Boa!

Talvez permitir

->rawColumns(['*'])

?

@divdax talvez tente usar ->escapeColumns([]) para obter o mesmo resultado.

muito obrigado isso é muito útil

->escapeColumns([]) funcionou para mim. rawColumns('column_with_html') não.
Usando laravel 5.5 com "yajra/laravel-datatables-oracle": "~8.0"

Nara, rawColumns recebe um argumento de array, então deve ser rawColumns(['column_with_html'])

Se desejar renderizar uma visão em uma coluna, você pode fazer isso:

  ->editColumn('action', function(User $u){
       return view('users.action-btns', ['id'=>$u->id])->render();
  })

Se eu estiver editando uma coluna para renderizá-la com uma visualização, não se pode presumir, por padrão, que a visualização será totalmente escapada pela lâmina e, portanto, não precisa escapar novamente? Uma coluna editada com uma visualização pode ser definida automaticamente (por padrão) para ser bruta, assim como uma coluna action já é (embora os documentos não mencionem isso).

eu tenho o mesmo problema, e meu amigo me diz para adicionar -> escapeColumns ([]), e funciona.

`if ($request->ajax()) {
$ajax = Datatables::of(Admin::query())->escapeColumns([])->make(true);
retorna $ajax;
}

    $dataTable = $htmlBuilder
        ->addColumn(['data' => 'admin_id', 'name' => 'admin_id', 'class' => 'id-column', 'title' => 'Id', 'searchable' => false, 'render' => function () {
            $editUrl = route('backend.staff.edit', '');
            return "function(data,type,full,meta){ return '<a href=" . $editUrl . "/'+data+'>'+data+'</a>'; }";
        }])
        ->addColumn(['data' => 'username', 'name' => 'username', 'title' => trans('default.name'), 'class' => 'name-column', 'render' => function () {
            $editUrl = route('backend.staff.edit', '');
            return "function(data,type,full,meta){ return '<a href=" . $editUrl . "/'+full.admin_id+'>'+data+'</a>'; }";
        }])
        ->addColumn(['data' => 'ip_address', 'name' => 'ip_address', 'title' => trans('default.ip_address')])
        ->addColumn(['data' => 'last_login', 'name' => 'last_login', 'title' => trans('default.last_login'), 'class' => 'date-column', 'searchable' => false])
        ->addColumn(['data' => 'html_status', 'name' => 'html_status', 'title' => trans('default.status'), 'class' => 'status-column', 'searchable' => false])
        ->addAction(['data' => 'action_button', 'name' => 'action', 'title' => trans('default.action'), 'class' => 'actions-column'])`

@tonihidayt Você entende o que escapeColumns([]) faz? Parece-me que desativou TODO o escape de HTML definindo SEM colunas para aplicar o escape de HTML. Essa pode ser uma maneira fácil de corrigir um problema, que o leva a uma situação perigosa em outras circunstâncias.


->escapeColumns([])

Isso está funcionando corretamente para mim.

Concordo com @judgej . Não quero correr o risco de escapar de TODAS as colunas, mas a que quero tornar bruta é um acessador e não produz um resultado bruto com $datatables->rawColumns(['full_link']);

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

shadoWalker89 picture shadoWalker89  ·  3Comentários

sangnguyenplus picture sangnguyenplus  ·  3Comentários

josiahke picture josiahke  ·  3Comentários

ahmadbadpey picture ahmadbadpey  ·  3Comentários

kamrava picture kamrava  ·  3Comentários