簡體   English   中英

CakePHP:在不同的控制器中使用模型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM