将html表列与php Query列进行比较并隐藏一些特定的列

时间:2015-07-24 19:49:33

标签: php laravel laravel-5

我在我的一个网站上使用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循环并显示数据。

谢谢

1 个答案:

答案 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,则基本上为您提供了阅读源代码的机会。因此,如果您关心用户能够阅读他们不应该阅读的内容,请确保您从不在客户端做这样的事情。