2011-05-23 38 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));