[英]CakePHP: using models in different controllers
我有一個項目的控制器/模型。 所以這控制了項目模型等等。我有一個由pages_controller控制的主頁。 我想在主頁上顯示項目列表。 這樣做很簡單:
function index() {
$this->set('projects', $this->Project->find('all'));
}
我猜不是因為我得到了:
Undefined property: PagesController::$Project
有人可以指引我朝正確的方向,
Jonesy
您必須通過變量$uses
加載控制器類中的每個模型,例如:
var $uses = array('Project');
或在行動中使用方法
$this->loadModel('Project');
在我看來,正確的方法是在當前模型中添加一個函數,該函數實例化另一個模型並返回所需的數據。
下面是一個示例,它在名為Example的模型中從Project模型返回數據,並在Example控制器中調用數據:
使用示例模型中的項目模型:
<?php
/* Example Model */
App::uses('Project', 'Model');
class Example extends AppModel {
public function allProjects() {
$projectModel = new Project();
$projects = $projectModel->find('all');
return $projects;
}
}
在示例控制器中返回該數據
// once inside your correct view function just do:
$projects = $this->Example->allProjects();
$this->set('projects', $projects);
在示例視圖中
<?php
// Now assuming you're in the .ctp template associated with
// your view function which used: $projects = $this->Example->allProjects();
// you should be able to access the var: $projects
// For example:
print_r($projects['Project']);
為什么這種“更好”的做法比將兩種模型加載到控制器中? 好吧,Project模型由Example模型繼承,因此Project數據現在成為Example模型范圍的一部分。 (這意味着在數據庫方面的事情是使用SQL JOIN
子句連接2個表)。
或者如手冊所說:
CakePHP最強大的功能之一是能夠鏈接模型提供的關系映射。 在CakePHP中,模型之間的鏈接通過關聯來處理。 在應用程序中定義不同對象之間的關系應該是一個自然的過程。 例如:在食譜數據庫中,食譜可能有很多評論,評論有一個作者,作者可能有很多食譜。 定義這些關系的工作方式允許您以直觀和強大的方式訪問數據。 ( 來源 )
對我來說,使用requestAction更合理。 這樣邏輯就包含在控制器中。
例如:
//在您的控制器項目中:
class ProjectsController extends AppController {
function dashboard(){
$this->set('projects', $this->Project->find('all'));
}
$this->render('dashboard');
}
請記住,您需要在/ app / views / projects中創建dashboard.ctp。
在Page的儀表板視圖(可能是/app/views/pages/dashboard.ctp)中添加:
echo $this->requestAction(array('controller'=>'projects', 'action'=>'dashboard'));
這樣邏輯將保留在項目的控制器中。 當然你可以請求/ projects / index,但是分頁的處理會更復雜。
更多關於requestAction()的信息 。 但請記住,你需要仔細使用它。 它可能會減慢您的應用程序。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.