對於cakePHP來說我還是個新鮮事,我想知道'live'網站是如何做到這一點的。cakePHP項目,文件夾,頁面,功能的組織結構
我看到2種可能性:
1)有一個控制器與一羣在其(擴展)的AppController頁(函數)。
2)有許多控制器,每個控制器在其(擴展的)AppController中都有少量的頁面(函數)。
(你可能會得到我的問題了,但我要去說,它以另一種方式太)
我應該把我的聯繫頁面比我的博客頁面單獨的控制器? (我有預感答案是肯定的。)爲什麼?
對於cakePHP來說我還是個新鮮事,我想知道'live'網站是如何做到這一點的。cakePHP項目,文件夾,頁面,功能的組織結構
我看到2種可能性:
1)有一個控制器與一羣在其(擴展)的AppController頁(函數)。
2)有許多控制器,每個控制器在其(擴展的)AppController中都有少量的頁面(函數)。
(你可能會得到我的問題了,但我要去說,它以另一種方式太)
我應該把我的聯繫頁面比我的博客頁面單獨的控制器? (我有預感答案是肯定的。)爲什麼?
您不需要爲一切創建控制器。事實上,你不應該,因爲它有更好的方法。你擁有的靜態頁面越多,它就越容易獲得。
對於靜態頁面從蛋糕/庫/控制器文件夾
複製pages_controller.php到你的app/controllers文件夾中。下面這段代碼添加到您的顯示器()動作:
function display() {
...
$page = Inflector::slug($page);
if (method_exists($this, $page)) {
$this->$page();
}
$this->render(join('/', $path));
return;
}
然後修改routes.php文件文件添加各種靜態網頁:
Router::connect('/about', array('controller' => 'pages', 'action' => 'display', 'about'));
Router::connect('/contact', array('controller' => 'pages', 'action' => 'display', 'contact'));
現在的聯繫方式是靜態頁面,但附加了一些邏輯。所以,你可以前往您的PagesController並創建專門爲這個動作(或任何其他頁面不只是靜態的):
function contact() {
if (!empty($this->data)) {
...
}
}
基本上,路由指向你的靜態頁面請求PagesController的display()
行動。顯示操作檢查是否存在同名的方法。如果是,則執行該操作並顯示頁面/ {page} .ctp視圖。
對於非靜態頁面,例如。博客
現在,這絕對需要一個模型。事實上,多個模型(Post has many comments,Post HABTM Tag)。爲了操作和訪問這些不同的模型,最好將代碼放入一個單獨的控制器中。
很多人喜歡根據他們的URL來命名他們的控制器。例如,他們將其控制器命名爲BlogController如果他們想要一個URL,如/blog
。
我更喜歡的一種方法是使用路由來獲取我想要的URL,並保持按照CakePHP約定命名的控制器。
例如, PostsController將控制Post模型和相關模型。但是,如果我想讓/blog
網址顯示所有帖子的列表,我會寫一條路線將其指向/posts/index
。
Router::connect('/blog', array('controller' => 'posts', 'action' => 'index'));
您也可以有其他路線。例如:/blog/2010/06/10/whats-in-a-post
指向/posts/view/
。
再次,這只是一個可能的例子。最後,您應該堅持您認爲有助於爲您和您的團隊組織代碼的方法。
真棒,這是足夠接近我想知道的。另一個有幫助的事情是另一個線程中的人說'胖胖的模型,瘦的控制器',當我讀到這個時,我有''哈哈!'時刻。 – jason 2010-12-03 16:13:21
...和我不能拼寫'組織'廢話lol – jason 2010-12-03 02:52:24