如何在不使用CakePHP中的"if()"语句的情况下保留多个类似的"视图/布局"文件DRY?

Jul*_*eff 2 php cakephp

我正在使用CakePHP开发一个应用程序,我有两个布局:一个用于主页,另一个用于应用程序的其余部分.除了标题上的一些编码,它们几乎完全相同.我可以做些什么来保持DRY,而if ()不是在整个布局中使用语句?

ink*_*dmn 5

我建议使用大量元素.这样,您仍然可以将所有代码保存在一个位置.例如,如果这是您的主页布局(不包括样板文件):

<body>
     <?php echo $this->renderElement('pageHeader'); ?>
     <?php echo $this->renderElement('frontPageNotification'); ?>
     <?php echo $this->renderElement('navAndOtherStuff'); ?>
     ...
</body>
Run Code Online (Sandbox Code Playgroud)

这是你的内部布局(你想要显示除frontPageNotification东西之外的所有东西:

<body>
     <?php echo $this->renderElement('pageHeader'); ?>
     <?php echo $this->renderElement('navAndOtherStuff'); ?>
     ...
</body>
Run Code Online (Sandbox Code Playgroud)

现在,如果它们几乎完全相同,我可能只使用一个布局并在布局本身中有一些if语句来确定要显示的内容.此外,您可以通过查看$ this-> params数组来选择显示哪些元素,以确定正在加载的页面背后的控制器和操作.喜欢:

<body>
     <?php echo $this->renderElement('pageHeader'); ?>

     <?php if($this->params['controller'] == 'pages' && $this->params['action'] == 'index') { echo $this->renderElement('frontPageNotification'); } ?>
     <?php echo $this->renderElement('navAndOtherStuff'); ?>
     ...
</body>
Run Code Online (Sandbox Code Playgroud)

诚然,这是相当丑陋的.试着提出我能想到的所有选项:)

祝好运