CakePHP 导航栏视图结构

Posted

技术标签:

【中文标题】CakePHP 导航栏视图结构【英文标题】:CakePHP navigation bar View structure 【发布时间】:2011-08-30 14:38:12 【问题描述】:

在 Cakephp 中,假设 default.ctp 仅用于构建 html<body> 仅包含 $content_for_layout。这对于mysite.com 的大多数页面都非常有用。但是,假设mysite.com/account/ 中的视图需要共享一个导航栏。哪种方法适合帐户区域下的视图?

A) 使导航栏成为自己的元素,并且该元素包含在每个视图中:

<!-- settings.ctp, profile.ctp, myfiles.ctp ... -->
<div id="account_area">
    <?php echo $this->element('account_nav'); 
    <div>...</div>
</div>

我不太喜欢 A) 中的每个 .ctp 都复制相同的包装代码(但最少)。所以也许像 B) 这样的东西更好:

B) 创建一个视图account/index.ctp 并让每个操作设置一个$section 变量并执行$this-&gt;render('/account/index'),将每个屏幕放置在自己的元素中:

<!-- /views/account/index.ctp -->
<div id="account_area">
    <div id="account_nav">...</div>
    <?php echo $this->element("account/$section"); 
</div>

C) 别的东西

谢谢,布赖恩

【问题讨论】:

【参考方案1】:

通常我这样做的方式是选项A。但我将$this-&gt;element('account_nav'); 放在布局中。这样可以防止将代码放在每个视图中。

如果导航需要配置或禁用,只需像往常一样向布局添加逻辑并将变量传递给视图。然后,您可以根据需要通过任何操作对其进行配置。

最后,这是一种混合方法。但根据我的经验,它提供了最大的灵活性。

【讨论】:

谢谢。选项 B 是否也被认为是一种有效的方法?我的应用程序有很多视图需要以某种方式使用这种功能,并且可能需要在布局本身中放置大量显示逻辑。 当然。但是 IMO,每当我使用 render() 时,我都觉得很脏 :) 从你的描述来看,选项 B 似乎需要更多设置。【参考方案2】:

非常是 CakePHP 的新手,所以我不知道 A 和 B 可能带来什么具体的好处,但是如果您想在多个视图中重用相同的导航条码(显然一个好主意),只需(C)使用 PHP 的 include 函数来包含所需的 .html 或 .php 文件?

我想这取决于导航栏的具体内容:任何比 HTML 链接更复杂的东西,而我的想法很糟糕。 :/

【讨论】:

使用原生的include/require可以切断框架提供的数据桥接。使用 elements 是使用 CakePHP 的正确方法。

以上是关于CakePHP 导航栏视图结构的主要内容,如果未能解决你的问题,请参考以下文章

在导航控制器中添加子视图覆盖导航栏

视图中没有导航栏

导航控制器内的标签栏控制器,或共享导航根视图

popToRootViewController 在导航栏上带来最后一个视图

标签栏控制器中的导航控制器

使用标签栏控制器 -> 导航控制器 -> 视图层次结构 - iOS Swift 从应用程序委托呈现视图