Laravel-datatables: [7.0] HTMLをレンダリングしません

作成日 2017年01月27日  ·  18コメント  ·  ソース: yajra/laravel-datatables

Laravel Datatables 7を使用していますが、テーブルがHTMLコードをレンダリングしていません。 以前はHTMLをレンダリングしていましたが、新しいLaravel DataTablesを6から7に更新すると、列でのHTMLのレンダリングが停止しました。 http://prntscr.com/e11n84

これはLaravelDataTables 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')はしませんでした。
「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つの問題を修正する簡単な方法であり、他の状況では危険な状況に陥ります。


-> escapeColumns([])

これは私にとって正しく機能しています。

@judgejに同意します。 すべての列をエスケープするリスクを冒したくありませんが、rawにしたいのはアクセサーであり、 $datatables->rawColumns(['full_link']);でraw結果を生成しません。

@yajraこのドキュメントを更新してください

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

このページは役に立ちましたか?
0 / 5 - 0 評価