【发布时间】:2016-04-05 09:41:57
【问题描述】:
我正在用 PHP 编写我的第一个 MVC 应用程序。我不想使用任何框架。
现在我正在寻找一个好的解决方案或最佳实践,以便在视图中为用户显示元素,前提是他们被允许与特定元素调用的函数进行交互。
应用在视图中加载一个模板文件。 在模板文件中,我展示了模型中的数据,这些数据是从控制器传递到视图的。
来自控制器
public function showUserList() {
$userList = $this->model->getUserList();
$this->view->loadTemplate($userList, 'user_list.php');
}
从视图:
class user_view {
public function loadTemplate($data, $file, $buffer= false){
if($buffer === true){
ob_start();
include dirname(__FILE__).'/templates/'.$file;
$c = ob_get_contents();
ob_end_clean();
return $c;
}else{
include dirname(__FILE__).'/templates/'.$file;
}
}
}
模板:
<table class="table" id="data-table">
<thead>
<tr>
<th>Name</th>
<th>Username</th>
<th>E-Mail</th>
<th>Group</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php
if(is_array($data)){
foreach($data as $key => $value){
?>
<tr>
<td><?php echo $data['name'].' '.$data['surname']; ?></td>
<td><?php echo $data['abbr']; ?></td>
<td><?php echo $data['email']; ?></td>
<td><?php echo $data['gr_name']; ?></td>
<td>
<div data-access="," onclick="$user_controller.showUserChangeView('<?php echo $data['id']; ?>')" class="btn btn-primary">edit</div>
<div data-access="checkAccess" onclick="$user_controller.deleteUser('<?php echo $data['id']; ?>')" class="btn btn-danger">delete</div>
</td>
</tr>
<?php
}
}
?>
</tbody>
</table>
</div>
如果允许用户调用按钮或菜单项的功能,我只想显示按钮或菜单项。
我的第一个方法是创建一个包含所有可以显示的元素的模板文件。并非所有用户都可以访问的元素获得数据属性。
视图加载模板,DOM 解析器解析文件,检查是否允许用户使用数据属性调用该函数。 如果不允许用户调用该函数,则该元素将被删除。 这尚未实施,因为我不确定这是否是一个好的解决方案,或者我如何才能做得更好?
【问题讨论】:
标签: php model-view-controller web-applications software-design