【问题标题】:cakePHP duplicating a function or using an outer controller? (DRY issue)cakePHP 复制函数或使用外部控制器? (干燥问题)
【发布时间】:2011-10-27 11:17:38
【问题描述】:

我有 3 个控制器,Tokens, StoresUsers

Token 与其他两个模型相关,每个 token 都有一个 owner-type 和 owner-id。

在 User_controller 和 Store_controller 中还有一个名为 EmailTokenToUser 的函数,它将激活链接发送给注册用户或商店的人。

我的问题是:我应该将函数传递给令牌吗? 如果是这样,我应该怎么称呼它? (requestAction 是个坏主意,只为一个函数创建一个对象..)

有什么想法吗?

【问题讨论】:

    标签: php cakephp dry cakephp-model code-duplication


    【解决方案1】:

    要重用代码,您应该将其传递给令牌的模型而不是控制器。那是它不应该是唯一的方式。要使用它,即使在控制器内部,也不应使用 requestAction(同样,它应该是您可以使用 requestAction 执行此操作的方式)。您可以通过两种方式做到这一点。

    App:import('model', Token');
    Token::myFunction($args);
    

    $token = ClassRegistry:init('Token');
    $token->myFunction($args);
    

    或者(如果你是从控制器内部收集它,你也可以使用)

    $this->loadModel('Token');
    $this->Token->myFunction($args);
    

    这是如果你把它放在Token模型中的函数。如果没有,请使用控制器方式,您应该这样做

    App:import('controller', 'Tokens');
    TokensController::myFunction($args);
    

    App:import('controller', 'Tokens');
    $token = new TokensController();
    $token->myFunction($args);
    

    希望对你有帮助:)

    【讨论】:

    • 太棒了。 tho,一个问题:如果模型相关,我应该加载它吗?我不能只是$this->LocalModel->RelatedModel->function() 吗?
    • 是的,您可以这样做,因为它已经加载。它应该工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    相关资源
    最近更新 更多