我想包括样式表和其他文件,如果它们在表示层中存在,则只包括。建议如何处理?我将在各自的图层中展示我现在看到的两个替代方案:
演示文稿:<?php
$internalpath = "/internal/path/style.css";
if (!file_exists($internalpath))
throw new Exception("Couldn't find style.css in " . $internalpath);
else {
?>
<link href="/external/path/style.css" rel="stylesheet" type="text/css">
<?php } ?>
问题:使用业务逻辑使 View 膨胀
业务逻辑:<?php
$internalpath = "/internal/path/style.css";
if (!file_exists($internalpath))
throw new Exception("Couldn't find style.css in " . $internalpath);
else
$style = '<link href="/external/path/style.css" rel="stylesheet" type="text/css">';
// ...
?>
问题:部分 View 使业务逻辑膨胀。
如何正确区分这些问题? 我还有其他简单的替代方法吗?
最佳答案
正是由于您给出的原因,这两种解决方案都是无效的-您没有正确分离它们。正确的是:
业务逻辑
$customStylesheets = [];
$internalpath = "/internal/path/style.css";
if (!file_exists($internalpath))
throw new Exception("Couldn't find style.css in " . $internalpath);
$customStylesheets[] = RewriteToExternal($internalPath);
演示文稿
<?php foreach($customStylesheets as $stylesheet) : ?>
<link href="<?=$stylesheet ?>" rel="stylesheet" type="text/css">
<?php endforeach; ?>
这样,业务逻辑就可以担心需要发生什么以及如何呈现它的演示。
至于一般的问题:不,在渲染过程中永远不要抛出异常。一旦业务逻辑认为请求是可以接受的,则它应完全正确地呈现。表示层与决策无关,而与输出有关。如果此时“异常”失败,那么您将在BL层中进行错误检查。
为了使这些问题更明显,请不要将PHP用作模板引擎,而要捕获Twig这样的漂亮东西,它迫使您仅将模板保持为呈现形式。 PHP作为模板引擎太大了,有些人无法正确分离它们。
关于php - 我应该在表示层中抛出异常吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20712957/