如何正确地将PHP与HTML分开(View的业务逻辑)

时间:2018-11-15 09:37:05

标签: php html

我正在学习编写更好的代码,并且不要将PHP代码与HTML / CSS混合使用,因为这对我和以后会阅读我的代码的人都更好。但是,我偶然发现了这样一种情况:我的用户具有不同的角色,并且每个角色都有自己的color / class / style / html。我最终将HTML代码放入PHP逻辑中,反之亦然。有解决这个问题的好方法吗?

PHP:

<tr>

HTML:

if ($user_role == 'administrator') {
    $user_color == '#ff0000'; <-- CSS Style in my PHP
    $user_class == 'admin-class'; <-- CSS Class in my PHP
}

$users = [
    'username' => 'John',
    'user_color' => '#ff0000' <-- CSS Style in my PHP
]

或者如果我不想在PHP中使用HTML或CSS,那么我最终将PHP放入HTML。

HTML

<a class="<?= $user_class ?> style="color: <? $user_color ?>">Administrator</a>

所以无论哪种方式,我最终都将两者混合在一起。这只是一个示例,我需要根据某些逻辑或条件来调整HTML。

2 个答案:

答案 0 :(得分:0)

您应该使用模板引擎(例如Twig

默认情况下,这还会从XSS等保护您的应用,避免转义变量。

这样,您可以像这样将PHP和HTML分开:

PHP

$template = $twig->load('index.html');
echo $template->render(array(
  'user_color' => $user_color,
  'user' => $user
));

HTML

<a style="color: {{ $user_color }}">{{$user->username}}</a>

答案 1 :(得分:0)

有几种选择:

  1. 仅使用PHP向HTML添加类,而不是CSS本身。然后,使用LESS之类的CSS预处理器来获取变量和其他功能:

<a class="<?= $userRole; "></a>

更少:

@colorRed = #f00;

.administrator {
    color: @colorRed;
}
  1. 您可以从PHP解析器输出CSS:
<link href="styles.php">

在那里

.administrator {
    color: <?= $colorRed; ?>
}
  1. 使用Twig或其他模板引擎

由于您开始学习结构,因此请考虑使用MVC原理:PHP代码(也称为controller)不必负责表示(也称为view)。所有用户界面的内容都必须在前端,而不是后端