如何最好地构建CakePHP模型

时间:2011-04-15 13:25:39

标签: php cakephp

我是CakePHP的新手,我正在寻求实施CakePHP模型的最佳实践。我仍在谷歌搜索结果,但想知道你是否有任何关于如何构建事物或有任何教程链接的建议......

4 个答案:

答案 0 :(得分:3)

数据库交互功能必须放在模型中。例如保存数据,保存相关数据,验证,模型间关系的抽象......

换句话说,所有重量级的东西都是给定模型独有的。

所有与给定模型没有直接关联或可能在许多模型中使用的功能都必须存储在行为中。

控制器应该非常轻便,易于阅读。他们必须使用模型的功能来控制业务工作流程,而且它也是自己的。

请记住保持你的模特胖和控制器瘦;)。

P.S。

蛋糕的cookbook是好事。

答案 1 :(得分:1)

您可以在这里找到manual paragraph regarding models。如果您需要有关API如何与模型一起使用的更具体的答案,您可以尝试official API page。我也用谷歌搜索过,找到了关于你可以找到的有用的Fat ModelSkinny Controller practice这几个的重复文章。

作为一般答案,模型是:

  

模型代表数据并用于   CakePHP应用程序用于数据访问。

基本上,使用模型,您可以管理数据库数据并在控制器中显示它们(将控制器视为视图,控制器和模型之间的粘合剂)。以下词语最能描述模型的实际使用:

  

模型通常代表数据库   表

因此,如果您有一个user表,则应创建至少一个模型来控制您要控制数据库user表的所有内容。例如,您可以使用User::create($name, $password, $email)User::edit($id, $set, $value)访问它,并修改数据库user相关表。

答案 2 :(得分:0)

模型是指一组特定数据。它可以位于数据库,文本文件或任何其他类型的数据中。要记住的关键是单个模型应该引用单个数据集。为了简化示例,我将演示一个用户表。假设我们在数据库中有以下表格:

CREATE TABLE `users` (
  `id` char(36) NOT NULL,
  `email_address` varchar(127) NOT NULL,
  `password` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
);

此表的裸骨基本模型如下所示:

<?php
class User extends AppModel {
    var $name = 'User';
    var $displayField = 'email_address';
}

现在,MVC架构(和CakePHP)的关键是USER数据操作所需的任何功能都应包含在此模型中。这有点广泛和彻底。在某些情况下,它可能会在其他地方发生。但是,如果您始终能够根据数据或业务需求/流程来考虑问题,那么它将帮助您确定代码的位置。

因此,对于用户模型,如果您需要添加用户,模型将处理该添加。控制器将调用表单(视图),然后处理将数据发送到模型的表单以添加到数据库中。

因此,如果您想在将记录添加到数据库之前检查唯一的电子邮件地址,则应在模型中完成。如果要确认电子邮件地址有效,则应在模型中完成。如果您想要在用户输入两个密码的情况下进行密码验证,并检查它们以确保它们是相同的,那么您可以在模型中执行此操作。

这就是胖模型瘦身控制器的含义。任何适合模型的东西,都应该去那里。

希望这有帮助。

答案 3 :(得分:-1)

摘要视图:

在Cake中完全应用它可能很困难,但模型的实例(在MVC意义上)代表一个实体,而不是数据库表或只是一个数据访问层。

例如,User模型的实例代表特定用户。

为此,您的模型方法必须假定已加载或设置特定实体的数据:

/**
 * Send an SMS to user
 *
 * @precondition $this->data has been set
 * @param string $msg
 * @return void
 */
public function sendSms($msg) {
    $this->smsGateway->send($this->data['User']['mobile'], $msg);
}

前置条件表示在此方法正常工作之前必须已调用User->read()。您可能认为这对于松散类型的语言来说有点肛门,但优点是您的模型开始看起来更像他们正在建模的现实世界,通过做出假设并坚持它们,您可以简化代码===取胜。