【发布时间】:2011-05-06 01:58:03
【问题描述】:
我想从另一个 .ctp 文件调用一个动作及其控制器文件的 .ctp 文件。 例如
users_controller.php 有一个名为 list_category() 的操作,我想从 /app/views/pages/index.ctp 文件中调用它。不仅要调用 list_category 还要显示它的 html 输出(我的意思是 list_category.ctp 也应该被渲染)。
谢谢。
【问题讨论】:
我想从另一个 .ctp 文件调用一个动作及其控制器文件的 .ctp 文件。 例如
users_controller.php 有一个名为 list_category() 的操作,我想从 /app/views/pages/index.ctp 文件中调用它。不仅要调用 list_category 还要显示它的 html 输出(我的意思是 list_category.ctp 也应该被渲染)。
谢谢。
【问题讨论】:
创建一个元素,例如list_category.ctp。
在元素中使用requestAction获取数据:
<?php
$categories = $this->requestAction('/users/list_categories');
?>
<?php foreach($categories as $category): ?>
<?php // Your display code goes here ?>
<?php endforeach; ?>
在你的控制器中确保你return你想要的数据。
<?php
function list_categories() {
return $this->User->Category->find('all');
}
?>
您可以将代码重复用于您的 list_category.ctp 视图。
使用requestAction 时会有开销,但通常是less than people believe。
【讨论】:
这可以通过requestAction 完成,但请注意,它很昂贵,您应该小心使用它。
【讨论】:
如何从您的主控制器调用控制器,然后将其结果传递给您的布局。最后使用一个元素在那里呈现输出,并使用该元素在另一个控制器上呈现输出。这样你就没有重复的布局。两个控制器只使用一个元素。
这与 Rails 在“烘焙”布局时创建布局的方式非常相似。它创建了一个元素的等价物以在添加和编辑布局中使用。
【讨论】:
这似乎是错误的,你想要完成什么?元素呢?
【讨论】:
你可以通过路由来做到这一点吗?我不确定我脑海中的语法,但我认为您可以指定控制器在您登陆该页面时运行的方法
【讨论】: