Php 超越父控制器功能laravel 8
我试图在jquery中创建一个具有用户角色和权限的datatable。拥有权限,能够将其与一个或另一个角色关联,也能够撤销它 创建动态数据表时,我可以显示数据表中的角色,但无法在相应列中创建复选框。附图: 如本表所示,有管理员和用户角色以及应用程序权限列表的示例。我希望能够在每个列中添加一个复选框,以将这些权限分配给这些角色 为此,我在控制器中创建了一个函数来生成动态数据表:Php 超越父控制器功能laravel 8,php,datatables,laravel-8,Php,Datatables,Laravel 8,我试图在jquery中创建一个具有用户角色和权限的datatable。拥有权限,能够将其与一个或另一个角色关联,也能够撤销它 创建动态数据表时,我可以显示数据表中的角色,但无法在相应列中创建复选框。附图: 如本表所示,有管理员和用户角色以及应用程序权限列表的示例。我希望能够在每个列中添加一个复选框,以将这些权限分配给这些角色 为此,我在控制器中创建了一个函数来生成动态数据表: public function getListDataTable(Request $request) {
public function getListDataTable(Request $request)
{
$actualModel = strtolower($request->modelTable."s");
if (!auth()->user()->hasPermissionTo($actualModel.'.index')) {
echo json_encode(['No tienes permisos para ver.']);
}
$modelTable = 'App\Models\\'.$request->modelTable;
$columns = array();
foreach ($request->columns as $column) {
array_push($columns, $column['data']);
}
$totalData = $modelTable::count();
$totalFiltered = $totalData;
$limit = $request->length;
$start = $request->start;
$order = $columns[$request->order[0]['column']];
$dir = $request->order[0]['dir'];
if(empty($request->search['value'])) {
$results = $modelTable::offset($start)
->limit($limit)
->orderBy($order, $dir)
->get();
} else {
$search = $request->search['value'];
$listing = $modelTable::where($columns[0], 'LIKE', "%{$search}%");
$totalListing = $modelTable::where($columns[0], 'LIKE', "%{$search}%");
for ($i = 1; $i < count($columns)-1; $i++) {
$listing->orWhere($columns[$i], 'LIKE', "%{$search}%");
$totalListing->orWhere($columns[$i], 'LIKE', "%{$search}%");
}
$results = $listing->get();
$totalFiltered = $totalListing->count();
}
$data = array();
$this->createButtons($results, $columns, $actualModel, $request, $totalData, $totalFiltered);
}
<script>
var columns = [];
$('#listDataTable thead th').each(function(){
var column = {"data" : $(this).attr('data-id')};
columns.push(column);
});
$('#listDataTable').DataTable({
"processing": true,
"serverSide": true,
"responsive": true,
"dom": '<"row"<"col-8 col-xs-12"B><"col-2 col-xs-12"l><"col-md-2 col-xs-10"f>>rt<"row"<"col-6"i><"col-6"p>>',
"buttons": ["copy", "csv", "excel", "pdf", "print", "colvis"],
"ajax":{
"url": "{{ route('getListDataTable') }}",
"dataType": "json",
"type": "POST",
"data":{ _token: "{{csrf_token()}}", modelTable : "{{ $modelTable }}"}
},
"columnDefs": [{
"targets": $('#listDataTable thead th:last').index(),
"orderable": false,
'class': 'actions text-center'
}],
"columns": columns
});
</script>
请分享更多详细信息-在控制器中重写函数的问题在哪里?这与数据表有什么关系?@NicoHaase感谢您的回复。我的第一个问题是覆盖方法,第二个问题是数据表。更新我的问题以获取答案。到目前为止,您尝试过什么来覆盖该函数?让我们先解决任何问题,然后再解决问题other@NicoHaase我不知道如何对我的oter函数进行重写,从来没有在php laravel中进行过重写。我正在阅读和旅行,在我的控制器中设置同名函数,在父控制器中设置我的函数受保护。我需要在我的数据表中,在我的控制器中的角色(管理员、用户等)中,在权限控制器(我用这个函数更新了我的问题)中创建复选框。我正在评论我的按钮,但什么都没有。。。
<script>
var columns = [];
$('#listDataTable thead th').each(function(){
var column = {"data" : $(this).attr('data-id')};
columns.push(column);
});
$('#listDataTable').DataTable({
"processing": true,
"serverSide": true,
"responsive": true,
"dom": '<"row"<"col-8 col-xs-12"B><"col-2 col-xs-12"l><"col-md-2 col-xs-10"f>>rt<"row"<"col-6"i><"col-6"p>>',
"buttons": ["copy", "csv", "excel", "pdf", "print", "colvis"],
"ajax":{
"url": "{{ route('getListDataTable') }}",
"dataType": "json",
"type": "POST",
"data":{ _token: "{{csrf_token()}}", modelTable : "{{ $modelTable }}"}
},
"columnDefs": [{
"targets": $('#listDataTable thead th:last').index(),
"orderable": false,
'class': 'actions text-center'
}],
"columns": columns
});
</script>
<div class="card-body">
<div class="table-responsive">
<table id="listDataTable" class="table table-bordered">
<thead>
<tr>
<th data-id="name">Name</th>
<th data-id="guard_name">Guard Name</th>
<th data-id="created_at">Created</th>
@foreach ($roles as $rol)
<th data-id="{{ $rol->name }}">{{ $rol->name }} </th>
@endforeach
<th data-id="options" class="text-center">Actions</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div><!-- end table-responsive -->
</div> <!--end card-body -->
</div><!-- end card -->
/**
* @override function createButtons in controller
*/
public function createButtons()
{
$nestedData = array();
foreach ($this->results as $d) {
foreach ($this->columns as $column) {
if ($column != 'options') {
if ($this->validateDate($d->$column)) {
$aux[$column] = date('Y-m-d H:i:s', strtotime($d->$column));
} else {
$aux[$column] = $d->$column;
}
}
}
/*$aux['options'] = '<div class="btn-group btn-group-sm">';
$aux['options'] = $aux['options'] . "<a href='".route($this->actualRoute.'.edit', $d->id)."'><span class='fa fa-edit text-green'></span></a>";
$btnDestroy = 'return confirm("¿Estas seguro que deseas eliminar esto?, la acción no se puede deshacer.")';
$aux['options'] = $aux['options'] . "
<form method='POST' action='".route($this->actualRoute.'.destroy', $d->id)."'>
<input name='_method' type='hidden' value='DELETE'>
<input name='_token' type='hidden' value='".csrf_token()."'>
<button type='submit' class='btn btn-link text-danger' onclick='".$btnDestroy."'><span class='fa fa-trash text-red'></button>
</form>
";
$aux['options'] = $aux['options'] . '</div>';
$nestedData[] = $aux;*/
}
return $nestedData;
}