【问题标题】:Is checking the value of SESSION variables classed as business logic?检查 SESSION 变量的值是否归类为业务逻辑?
【发布时间】:2016-11-06 21:16:01
【问题描述】:

我正在开发我的网络应用程序。 我有这段代码:

<?php 
if($_SESSION['add'] == 1) 
echo '<input type="button" name="add" id="add" value="Add" onclick="add()" >';
if($_SESSION['edit'] == 1)
echo '<input type="button" name="edit" id="edit" value="Edit" onclick="edit()">';
?>

基本上,当用户登录时,我会设置会话变量来指示该用户是否有权进行更改和添加记录。所以当他们到达主页时,我使用这段代码来决定是否显示我的添加和编辑按钮。

这段代码是否违反了逻辑/表示分离的规则?如果可以,如何实现分离?

我没有使用任何网络框架。

【问题讨论】:

  • 如果 add() 和 edit() 只是一个 javascript 函数,那么即使没有访问权限,人们也可以调用它们。
  • 那么我应该如何解决这个问题?

标签: php html optimization


【解决方案1】:

虽然 View 中的条件非常好,但您的 View 不应尝试自行从任何来源获取任何数据。这不是它的角色,它应该只适用于你的控制器(或演示者,取决于你的应用程序架构是什么)提供给它的数据。您的 View 不应该知道 whywheneditadd 模式之间切换背后的逻辑。它只需要知道在订购时如何做到这一点。在您的情况下,Controller 应检查 $_SESSION 并决定应显示哪种模式、添加或编辑您的 View 并将该决定传递给您的 View(即 action_mode = edit|add)以进行哑执行。

PS:我建议养成将代码块(甚至是单行代码)放在{} 括号中的习惯。

【讨论】:

  • 我无法理解您的答案,抱歉。
  • @Connor 简而言之:您希望将视图逻辑与特定数据源$_SESSION解耦。您将来可能会遇到其他情况,在这种情况下,除 $_SESSION 之外的其他东西决定特定的编辑模式,您不想将该决定直接与 $_SESSION 变量联系起来。
猜你喜欢
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 2014-08-05
相关资源
最近更新 更多