Laravel-datatables: [7.0] Не отображает HTML

Созданный на 27 янв. 2017  ·  18Комментарии  ·  Источник: yajra/laravel-datatables

Я использую Laravel Datatables 7, но моя таблица не отображает HTML-код. Раньше он отображал HTML, но когда я обновил Laravel DataTables до 7 с 6, он перестал отображать HTML в столбце. http://prntscr.com/e11n84

Это с Laravel DataTables 6 - http://prntscr.com/e11ph0

Самый полезный комментарий

    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);

Все 18 Комментарий

Результаты экранируются по умолчанию в v7. Еще не задокументированы все критические изменения, но журнал изменений должен дать некоторые подсказки. Спасибо!

Как я могу решить ту же проблему, но в сервисе?

@brian2694 используйте новый метод ->rawColumns(['column_with_html']) .

У меня похожая проблема, есть ли пример использования 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);

Хорошо!

Может быть, разрешить

->rawColumns(['*'])

?

@divdax , возможно, попробуйте использовать ->escapeColumns([]) для достижения того же результата.

большое спасибо это очень полезно

->escapeColumns([]) сработало для меня. rawColumns('column_with_html') нет.
Использование laravel 5.5 с "yajra/laravel-datatables-oracle": "~8.0"

Нара, rawColumns принимает аргумент массива, поэтому он должен быть rawColumns(['column_with_html'])

Если вы хотите отобразить представление в столбце, вы можете сделать это:

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

Если я редактирую столбец, чтобы отобразить его с представлением, то нельзя ли по умолчанию предположить, что представление будет полностью экранировано лезвием, и поэтому не нужно снова экранировать? Столбец, отредактированный с помощью представления, может быть автоматически установлен (по умолчанию) как необработанный, как уже есть столбец action (хотя в документах это не упоминается).

у меня такая же проблема, и мой друг сказал мне добавить ->escapeColumns([]), и это работает.

`если ($запрос->ajax()) {
$ajax = Datatables::of(Admin::query())->escapeColumns([])->make(true);
вернуть $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 Вы понимаете, что делает escapeColumns([]) ? Мне кажется, что он отключил ВСЕ экранирование HTML, установив НЕТ столбцов для применения экранирования HTML. Это может быть простой способ решить одну проблему, которая затем приведет вас в опасную ситуацию при других обстоятельствах.


-> escapeColumns ([])

Это работает правильно для меня.

Я согласен с @judgej . Я не хочу рисковать экранированием ВСЕХ столбцов, но тот, который я хочу сделать необработанным, является аксессором и не дает необработанного результата с $datatables->rawColumns(['full_link']);

@yajra Пожалуйста, обновите эту документацию

https://datatables.yajrabox.com/eloquent/add-edit-remove-column

Была ли эта страница полезной?
0 / 5 - 0 рейтинги