我在我的一个网站上使用Laravel 5。我的主页有一个显示表A数据的表。我有一个后端,管理员可以隐藏某些列,这样它们就不会显示在主页表上。我构建它的方式是我有一个名为hidden_columns的表。管理员检查列时隐藏。该列将添加到hidden_columns表中。如果他们想取消隐藏它,他们会检查它,并且该列将从隐藏列表中删除。后端工作正常。问题是我如何从显示数据的主页中隐藏hidden_columns表中的列?
这是我在主页中显示数据的代码 控制器
$tables = TableModel::get();
$hiddenCols = HiddenColumn::lists('col_name');
return view('view path', compact('tables','hiddenCols'));
然后在我看来,我只是在表对象上运行一个foreach循环并显示数据。
谢谢
答案 0 :(得分:1)
嗯,有几种方法可以解决这个问题。就个人而言,我会在某处创建可能列的列表(例如,您可以通过db选择静态或动态列表),删除控制器中可能列的所有隐藏列,并将其余列返回到视图。如果您将列命名为与TableModel的字段相同,则会更容易。
$rows = TableModel::get();
// as static approach - or you go dynamic with another table, what would be better
$allCols = array('name_col1', 'name_col2', 'name_col3');
$hiddenCols = HiddenColumn::lists('col_name');
$remainingCols = array_except($allCols, $hiddenCols);
return view('view path', compact('rows','remainingCols'));
在视图中,您可以遍历其余列并显示它们。如果您选择了相应的名称,则可以使用以下内容:
<table>
<thead>
<tr>
@foreach($remainingCols as $col)
<th>{{ $col }}</th> // maybe use some language files here
@endforeach
</tr>
</thead>
<tbody>
@foreach($rows as $row)
<tr>
@foreach($remainingCols as $col)
<td>{{ $row->$col }}</td>
@endforeach
</tr>
@endforeach
</tbody>
</table>
编辑:按照上面评论中的建议继续使用JavaScript是无效选项。该功能的解释说,管理员需要隐藏/显示列,这意味着,这可能是一个安全相关的功能。通过使用JavaScript,之后必须打印和操作所有内容,基本上,如果列仅被隐藏,或者在操作表之前竞争(例如暂停)JavaScript,则基本上为您提供了阅读源代码的机会。因此,如果您关心用户能够阅读他们不应该阅读的内容,请确保您从不在客户端做这样的事情。