如何在我的元素中调用app_controller中的函数

时间:2010-12-14 23:52:02

标签: cakephp elements applicationcontroller

我正在开发一个网站;用户可以通过一个注册帐户添加汽车和手机。然而,我在右侧和左侧的盒子上有顶部的打击(汽车,手机),在中间我有最近添加的汽车和手机。我把顶部的命中分成了元素,元素是topCars,topMobiles.I我想写两个函数来做我的东西。这两个功能都应该是通用的,因为将来我们可能会添加一些其他服务,如软件或电影。然而,第一个功能将获得最近的汽车或手机......等,这将发布在我的主页中间。第二个功能应该是(汽车,手机,电影......等)的热门歌曲。我写了以下代码:

class AppController extends Controller
 {  
  var $uses = array('Car','Mobile');
  function Controler()
  {
   App::import('Core', 'Sanitize');
  }

  function beforeRender(){
    $this->getLatestData(); 
  }

  function beforeFilter() {
   $this->getTopData();
  }

  function getLatestData(){
   $latestCars = $this->Car->find('all', array('order' => array('id' => 'desc'),
                                                  'limit' => 7));
   $latestMobiles = $this->Mobile->find('all', array('order' => array('id' => 'desc'),
                                                  'limit' => 7));
   $this->set('cars',$latestCars);
   $this->set('mobiles',$latestMobiles);
  }


  function getTopData($item){ // to get the top hits

    $top = $this->$item->find('all', array('order' => array('hits' => 'asc'),
                                              'limit' => 3)); 
    $this->set($item,$top);
  }
}

我的代码可以很好地处理最新添加的项目,但是当我尝试获得热门命中时,它会返回错误。 请帮助我知道如何使它工作 感谢

3 个答案:

答案 0 :(得分:1)

$this->requestAction('App/getTopData/'.$param);

答案 1 :(得分:0)

我认为你不应该把这些方法放在app_controller中。您应该创建另一个控制器并将getLatestData和getTopData放在那里。然后从元素中使用$ this-> requestAction从视图中调用控制器操作。当然,您还应该使用某种缓存来加快速度。

有些人会说你不应该使用requestAction,但这里有一篇来自Cake开发人员的文章: http://mark-story.com/posts/view/how-using-requestaction-increased-performance-on-my-site

答案 2 :(得分:0)

谢谢你们的确有效 我发现了另一篇文章,它可能对其他蛋糕初学者有用 http://bakery.cakephp.org/articles/gwoo/2007/04/12/creating-reusable-elements-with-requestaction