【问题标题】:Best way to create public functions in CakePHP 2.3在 CakePHP 2.3 中创建公共函数的最佳方法
【发布时间】:2013-02-22 09:05:21
【问题描述】:

我需要创建 1 个或多个文件,以集中有关特定操作的所有功能,例如:

  • 返回客户支票的总和。
  • 关闭特定客户的支票。
  • 将特定表的所有项目转移给其他。

但函数使用2个或更多模型,并在数据库中执行一些操作(crud)。

我需要创建行为或组件吗?

如何在行为/组件中使用 1 个或多个模型? 参考类注册表加载模型()?

最好的做法是什么?


如果某些用户可以编辑我的文本,以便其他人更清楚,我很感激。并且,如果标题不正确,也要更改。谢谢。

对不起我的英语。我知道这很糟糕

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

    您的票缺少大量信息,但让我尝试猜测一下:

    这听起来像您有三个或四个模型,它们的数据应该相互关联。我认为它是这样的:

    表格:

    • 客户
    • 检查
    • 购物车项目
    • 购买的物品

    协会:

    • 客户有很多支票
    • 客户有很多购物车项目
    • BoughtItem 属于客户

    您所称的“lib”以及您想要触发的内容肯定是由单个操作触发的,例如“结帐”或“运行报告”操作。对我来说,这听起来像是您想要结帐购物车或为客户生成商品列表。

    在您的客户模型中有这样的方法:

    public function report($customerId, $checkid) {
        $sum = $this->Check->calculateSum($customerId, $checkId);
        $checkClosed = $this->Check->close($checkId);
        $items = $this->CartsItem->find('all', array(
            'conditions' => array('CartsItem.customer_id' => $customerId)));
        foreach ($items as $item) {
            $this->BoughtItem->save($item['CartsItem']);
        }
        $this->CartsItem->deleteAll(array('CartsItem.customer_id' => $customerId));
        return compact('sum', 'checkClosed', 'items');
    }
    

    如果您的数据不相关,请使用 ClassRegistry::init('ModelName');获取另一个模型的实例。

    但关键是您所做的一切都是数据操作,因此对于模型方法来说这是一项明确的工作。如果您需要请求中的参数,只需将它们作为参数传递给该方法。你的方法可以返回你需要的任何东西,这取决于你。

    “lib”不是您想要做的事情的正确位置甚至模式。

    【讨论】:

    • 我也不会为此使用库。我已经使用 cake 大约 5 年了,从来不需要使用 libs。这个答案更有意义。
    • @burzum 是的,你说得对。我目前在同一个控制器中使用一个动作,并且只使用现有的关系,如果没有,则使用 loadModel()。无论如何,谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多