Laravel Datatables 7を使用していますが、テーブルがHTMLコードをレンダリングしていません。 以前はHTMLをレンダリングしていましたが、新しいLaravel DataTablesを6から7に更新すると、列でのHTMLのレンダリングが停止しました。 http://prntscr.com/e11n84
これはLaravelDataTables 6の場合です-http ://prntscr.com/e11ph0
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')はしませんでした。
「yajra / laravel-datatables-oracle」でlaravel5.5を使用する:「〜8.0」
奈良、rawColumnsは配列引数を取るので、rawColumns(['column_with_html'])である必要があります
列にビューをレンダリングしたい場合は、次のようにすることができます。
->editColumn('action', function(User $u){
return view('users.action-btns', ['id'=>$u->id])->render();
})
列を編集してビューでレンダリングしている場合、デフォルトでは、ビューがブレードによって完全にエスケープされると想定できないため、再度エスケープする必要はありませんか? ビューで編集された列は、 action
列がすでに存在するのと同じように、(デフォルトで)自動的にrawに設定できます(ただし、ドキュメントにはそのことは記載されていません)。
私は同じ問題を抱えています、そして私の友人は私に-> escapeColumns([])を追加するように言いました、そしてそれは機能します。
`if($ request-> 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エスケープを無効にしたように見えます。 これは、1つの問題を修正する簡単な方法であり、他の状況では危険な状況に陥ります。
これは私にとって正しく機能しています。
@judgejに同意します。 すべての列をエスケープするリスクを冒したくありませんが、rawにしたいのはアクセサーであり、 $datatables->rawColumns(['full_link']);
でraw結果を生成しません。
@yajraこのドキュメントを更新してください
https://datatables.yajrabox.com/eloquent/add-edit-remove-column
最も参考になるコメント