- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了遵循最佳 MVC 实践,我试图确保我的所有代码都遵循胖模型、瘦 Controller 方法,因此有人可以关注下面的内容并告诉我我是否走在正确的轨道上?
目前在我的应用程序中我有
ExpenseClaims hasMany Expenses
Expenses belongsTo ExpenseClaims
在我的pages/admin_index.ctp中,我需要获取属于列出的每个ExpenseClaim的所有费用的总和。
因此,我认为执行此操作的最佳 FMSC 方法是在 AppModel 中加载 ExpenseClaim 模型
App::uses('ExpenseClaim', 'Model');
然后在 AppModel 中有一个函数,我可以在应用程序 Controller 中使用该函数(因为它在 appModel 中),我可以将 ExpenseClaim ID 传递给该函数,它将返回所有相关费用的总计。
这是最正确的 MVC 方式,而不是在 Controller 中完成这一切吗?
提前致谢
最佳答案
最好的 FMSC 方法是,正如您所说,在模型中编写函数。 但是!!不要在 AppModel 中执行此操作,这是不好的做法。为什么要在 AppModel 中放置与两个(最多)模型相关的代码? 每个模型都会继承该功能,这没有多大意义。假设您有一个“菜单模型”或“用户模型”,它们继承 totalExpenses
函数是不合逻辑的,对吧?我知道您希望每个 Controller 都可以使用该功能,并在需要时进行查看,但这不是实现的方法。
一步一步(实际上只需两步):
1) 在 ExpenseClaim 模型中,编写一个新函数来计算费用总额
class ExpenseClaim extends AppModel {
/* definitions and validations here*/
public function totalExpenses($id) {
return $this->Expenses->find('count', array('conditions'=>
array('expense_claim_id' => $id)));
}
}
因此,在 ExpenseClaimsController 中,您可以使用以下命令调用此函数
$total = $this->ExpenseClaims->totalExpenses($the_id);
2)现在,在费用 claim 模型中拥有计算总计的函数是合乎逻辑的,因此可以在相应的 Controller 中使用,但您说您想在 pages/admin_index 中使用它,让我们假设 pages 与声明模型完全没有关系。好吧,那么你可以这样做
ClassRegistry::init("ExpenseClaims")->totalExpenses($the_id);
或
$this->loadModel("ExpenseClaims");
$this->ExpenseClaims->totalExpenses($the_id);
(都在 Controller 中),您无需将该函数放入 AppModel 中即可获得该值。
(顺便说一句,我编写的代码应该可以工作,但是您需要微调 Controller 和模型名称或在这里或那里关闭括号,我还没有测试过它)。
现在,这是一般的最佳实践。适用于大多数情况,具有更复杂的功能。但对于您的具体情况,您可能想看看蛋糕的 counterCache ,它会记录东西的数量,而您无需做太多事情。
关于CakePHP 胖模型和瘦 Controller - appModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17190369/
经验丰富的程序员,但对 CakePHP 2.1 不熟悉,我花了一天的时间努力让自定义 Helper 在 View 中工作,遵循手册:http://book.cakephp.org/2.0/en/vie
任何人都可以列出 CakePHP 框架相对于其他 PHP 框架的缺点吗? 1) 请解释为什么缺少的功能对 PHP 项目如此重要? 2) 该缺失的功能如何帮助那些使用具有该功能的框架的 Web 开发人员
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
我对 PHP 比较陌生。开始学习 PHP,但后来遇到了 cakePHP,它可以加快开发时间。 阅读文档和博客教程后,我仍然不明白命名约定。我想在我开始做一些例子之前我不会知道,但是为了让我开始,有人可
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 6 年前。
任何人都可以告诉我为什么当一个字段没有翻译时它返回空,而不是默认翻译? 我会感谢所有建议... 不知道你想看我代码的哪一部分,因为它都是直接来自 www.book.cake.org。所以我粘贴了一些代
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我正在编写一个支持多种测量单位的应用程序。在极少数情况下,用户想要更改他们的测量系统,我需要运行一个查询,该查询应用乘数将应用程序中的每个单位列缩放到正确的测量系统。为了确保所有数据在此操作出现问题时
很难说出这里问的是什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。如需帮助澄清此问题以便可以重新打开,visit the help center . 8年前关闭
在用户模型中: var $hasMany = array( 'Photo' => array( 'className' => 'Photo',
剧透:我想更好地了解对 CakePHP 应用程序的请求的生命周期。 背景:我使用的是 CakePHP v2.3。我正在调试一个问题,该问题导致我无法找到的不想要的重定向。我正在尝试通过增量添加 die
在我的 Cake 应用程序中,我有一个 Controller “completed_projects”。它的索引操作不带参数并列出了一些项目。可以访问不同的页面example.com/complete
我找不到有关cakeError()定义为成员函数的任何信息。 documentation仅声明该调用看起来像这样: $this->cakeError(string $errorType [, arra
我创建了一个自定义数据源,该数据源从Web api获取数据,现在我正在研究实现错误处理。 在数据源中,我正在调用$ model-> onError()。在模型中,我创建了onError方法,并且可以使
除了重定向和渲染之外,还有其他命令可以将 Controller 重定向到特定 View 页面吗? 我的重定向为 $this->redirect('/forms/homepage/'.$userId);
我试图在我的字段中查找计数并连接该计数,但它给出错误消息,因为找不到 make_count 并且我在上面创建了相同的字段。 $this->Car->virtualFields['make_count'
我想要条件验证,即在更新密码时隐藏字段,并且密码验证为“6 到 15”个字符!因此密码以哈希格式存储在数据库中,因此不允许我更新。我的模型代码如下, array( 'rule
echo $form->input( 'country_id', array( 'type' => 'select', 'label' => __('C
我正在使用 CakePHP 创建一个锦标赛平台。目前,我已经创建了以下可以完美运行的表格、模型和 Controller :锦标赛、用户和团队。 我还创建了一个“Tournamentuser”表、 Co
我的场景是这样的: 在我的/views/layout/default.ctp 在我的/views/pages/home.ctp Html-
我是一名优秀的程序员,十分优秀!