繁体   English   中英

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

[英]How to properly seperate PHP from HTML (Business logic from View)

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

PHP:

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
]

HTML:

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

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

HTML

foreach($users as $user):
    // Too much PHP logic in my HTML view
    if ($user->role == 'administrator') {
        $user_color = 'red';
    } else if ($user->role == moderator) {
        $user_color = '#00ff00'
    }

    <a style="color: <?= $user_color ?>">$user->username</a>
endforeach;

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

您应该使用模板引擎(例如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. 使用PHP仅向HTML添加类,而不是CSS本身。 然后使用一些CSS预处理器(如LESS)来获取变量和其他功能:

<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 )。 所有UI内容都必须在前端,而不是后端

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM