![](/img/trans.png)
[英]Laravel how to add a function from a view to the controller (Business Logic Layer)
[英]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>
有几种选择:
<a class="<?= $userRole; "></a>
少于:
@colorRed = #f00;
.administrator {
color: @colorRed;
}
<link href="styles.php">
那里
.administrator {
color: <?= $colorRed; ?>
}
由于您开始学习结构,因此请考虑使用MVC原理:PHP代码(即controller
)不必负责表示形式(即view
)。 所有UI内容都必须在前端,而不是后端
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.