2012-03-18 74 views
3

訪問默認的CakePHP站點時,它會將您帶到「home.ctp」頁面。在CakePHP中爲「home」視圖添加控制器功能

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 

我想添加一些元素存在(如博客文章),所以我想我可能只是將其添加到PagesController()類:

public function home() { 
    $this->set('blogposts', $this->Blogpost->find('all')); 
} 

但是,這並不工作。

所以:什麼是在主頁上添加這樣的事情以正確的方式(或與此有關的任何其他網頁)

回答

11

的首選方案是創建主頁的自定義路由,但你也可以覆蓋PagesController的顯示功能

選項1:(首選方法)

Router::connect('/', array('controller' => 'mycontroller', 'action' => 'myaction')); 

選項2

Router::connect('/', array('controller' => 'pages', 'action' => 'home')); 

方案3:

class PagesController { 
    function display() 
    { 
     // default controller code here 
     // your custom code here 
    } 
} 

的最後一個選項是在您的視圖中使用requestAction,但不推薦,因爲它有一個巨大的性能缺陷

方案四: (不推薦)

$newsitems = $this->requestAction(array('controller' => 'newsitems', 'action' => 'getlatestnews', 'limit' => 10)); 
+0

是啊,。但它找不到$ this-> Blogpost。 – John 2012-03-18 11:51:06

+2

啊,用'$ this-> set('blogposts',ClassRegistry :: init('Blogpost') - > find('all'));'搞定了! – John 2012-03-18 11:56:46

1

事實上,動作displayhome是一個參數。所以你在Controller Pages中的主要方法必須調用display,而不是home。之後,創建display.ctp視圖。

參考:

0

要實際回答原始問題:

$this->loadModel('Blogpost'); 

理想的模式應該使用選項2,頁面控制器我的自定義函數被調用時,被稱爲

$this->loadModel('BlogPost');