我想包括样式表和其他文件,如果它们在表示层中存在,则只包括。建议如何处理?我将在各自的图层中展示我现在看到的两个替代方案:

演示文稿:

<?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/

10-11 01:10