我想從另一個.ctp文件中調用一個控制器文件的.ctp文件。例如對於例如 如何從.ctp文件運行控制器文件的操作?
users_controller.php有一個名爲list_category()的操作,我想從/app/views/pages/index.ctp文件中調用它。不只是調用list_category,但也希望顯示它的html輸出(我的意思是list_category.ctp應呈現)。
謝謝。
我想從另一個.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。
你可以用路由嗎?我不確定語法,但我認爲你可以指定控制器在你登陸頁面時運行的方法
這似乎是錯誤的,你試圖完成什麼? ?元素如何?
如何從主控制器調用控制器,然後將其結果傳遞給您的佈局。最後使用一個元素來渲染那裏的輸出,並且也使用這個元素來渲染另一個控制器上的輸出。這樣你就沒有重複的佈局。只有一個由兩個控制器使用的元素。
這與Rails在「烘烤」它們時創建佈局的方式非常相似。它創建了一個在添加和編輯佈局中使用的元素的等價物。
這可以用requestAction完成,但請注意,它很貴,您應該小心。
但是,如果我想將此操作用作小部件,該怎麼辦。我的意思是我想調用這個動作也想在另一個layout/vtp文件中渲染ctp html。 – gautamlakum 2010-11-09 13:37:19
您可以在任何想要渲染的元素上調用該元素。在任何視圖中,如果你輸入<?php echo $ this-> element('list_category'); ?>它將呈現元素,元素中的requestAction將從控制器獲取數據。 – 2010-11-11 10:24:22