2011-05-23 36 views
0

我有一個帶有requestAction的元素,但它給了我一個永無止境的請求循環。Cakephp請求操作給了我一個永無止境的請求循環

例如:

這是我的元素

<?php $plans = $this->requestAction('profile/Plans'); ?> 
<?php foreach($plans as $plan): ?> 

    <div class="notificationsmall <?php echo $plan['sections']['lable']; ?>"> 
     <p><b><?php echo $plan['plans']['plan_title']; ?></b></p> 
     <p><?php echo $plan['plans']['plan_description']; ?></p> 
    </div> 
<?php endforeach;?> 

這是功能。它在「配置文件」控制器中

function Plans($id = Null){ 
    $this->set('plans', $this->Plan->Query('SELECT * FROM plans, sections WHERE plans.user_id='.$id.' AND sections.id=plans.section_id')); 
} 

我不知道什麼是錯的。

回答

2

是第一塊代碼的概況/計劃視圖?如果是這樣,你會得到一個無限循環,因爲視圖再次調用配置文件/計劃動作,回到視圖中的同一點,依此類推。

通過代碼判斷我認爲你對元素的工作原理有一些誤解。當你需要插入元素時,你應該使用requestAction,而不是在元素內部。

(我Dunhamzzz同意requestAction應避免,但有時這是不可能的,你應該考慮,如果使用實際元素會在這種情況下工作。)

+0

所以我必須使用同樣的功能在多個控制器? – DaDu 2011-05-23 13:55:44

+0

如果使用使用數據庫中數據的元素,那麼是的。如果你使用requestAction,那麼沒有。 RequestAction的觀點是,你可以直接從瀏覽器調用一個動作,就像你直接調用該頁面一樣。這就像一個頁面內的頁面。最終這取決於你想要做什麼,所以我們現在可能正在談論不同的事情。 – JJJ 2011-05-23 18:05:08

+0

這個例子非常簡單,使用RequestAction絕對不是做它的「蛋糕」方式 – Dunhamzzz 2011-05-23 18:41:11

2

問題是您正在使用RequestAction!不惜一切代價避免它。你應該在你的計劃模型,基本上回到你正在做的查詢的內容,如

function getByUserId($userId) { 
    return $this->find('all', array('conditions' => array('Plan.user_id' => $userId))); 
} 
在你的行動

然後創建一個方法,只是做$this->set('plans', $this->Plan->getByUserId($userId));