[英]Are CakePHP models actually controllers?
我不是MVC架構的專家,但是我一直在某些JAVA項目中使用提到的架構。 現在,我進入了PHP
MVC
框架(例如CakePHP和Laravel ),並決定選擇CakePHP 。
更深入地講,我看到CakePHP中的模型負責諸如查詢之類的操作,而其他一些則負責數據本身在arrays
管理(即$ user ['User'] ['first_name'])。
我所熟悉的方式是, Model類僅用於存儲模型數據,也就是說,數組在CakePHP中的作用
public Class User {
private String firstName;
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getFirstName() { return this.firstName; }
}
Controller類負責查詢和其他模型構建操作,也就是說, CakePHP中的模型做什么:
public Class UserManager {
public User getById(int id) { /* */ }
public boolean save(User user) { /* */ }
}
那么, CakePHP和類似的MVC Frameworks
,Models實際上是控制器嗎? 如果可以,這是否應該是一種新型的體系結構,例如Router-View-Controller,因為控制器類實際上是路由請求的?
我認為官方文檔已經很好地說明了這一點:
模型是位於應用程序中業務層的類。 這意味着他們應該負責管理與您的數據有關的幾乎所有事情,其有效性,相互作用以及您工作領域中信息工作流程的演變。
通常,模型類代表數據,並在CakePHP應用程序中用於數據訪問,更具體地說,它們代表數據庫表,但不僅限於此,還可以用於訪問任何處理數據的內容,例如文件,外部Web服務,iCal事件,或CSV文件中的行。
實際上,基本上認為CakePHP 2.0中的模型可以執行任何類型的數據操作。
上面的任務都不認為是在控制器中完成的,我們要尊重關注點分離(SoC)。 控制器僅管理請求,但不處理數據,這就是模型工作。 此外,模型比控制器更容易進行單元測試,而且您可以在shell中共享它們,而對於沒有違反MVC的控制器,則無法做到這一點:這是一個示例:
您應該始終保持模型胖而使控制器變薄:
/** CONTROLLER **/
if ($this->request->is('post')) {
if ($this->Model->doSomething($this->request->data)) {
$this->Session->setFlash(__('Something was done right!'));
$this->redirect(['view' => $this->Model->data['Model']['id']);
}
}
/** MODEL **/
public function doSomething($data) {
$this->create();
$result = $this->save($data);
if ($result) {
$result[$this->alias][$this->primaryKey] = $this->getLastInsertId();
$this->data = $result;
return true;
}
return false;
}
不,模型不是控制器,不在任何php框架中。
模型僅顯示您的數據集合,而另一方面,控制器則控制模型和視圖之間的流程。 例如,控制器調用您的模型以獲取數據,然后以某種方式處理該數據並將其推送到視圖,因此您可以在那里拾取它並對其進行處理。
您願意告訴您為什么選擇cakePHP嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.