簡體   English   中英

ZF2 MVC全局功能

[英]ZF2 MVC global function

對於多個控制器的應用程序,使函數/方法全局化的最佳實踐是什么?

例如,假設我們有一個控制器。 這個控制器正在使用一個函數,但是我們只想調用該函數,而不是將它復制粘貼到另一個控制器。

class ControllerName extends AbstractActionController {
    // Your actions

    // Has to become a call,
    // instead of copy pasting this function to several controllers
    public function GlobalFunction ($parameter) {
        //Use parameter and return something
    }
}

創建ControllerPlugins是一種解決方案,我還閱讀了有關創建和設置StdLib 那么只能在控制器上調用的函數的最佳實踐是什么?

另外兩個相關問題:

接受的答案中描述的插件將完成這項工作。 但在什么情況下你不想使用插件並將尋求另一種解決方案? 我只想提亮它,因為我沒有找到足夠的文件。

另一點是騷擾。 如果這個插件必須可用於多個模塊怎么辦? 在應用程序中設置插件並在module\\Application\\Config\\module.config.php或在theZend App的Config\\Autoload\\Global.php進行設置?

您可能希望查看提供的幾個Zend\\Mvc\\Controller\\Plugin類。 最終,這完全取決於你的“全球功能”應該做什么。 它可能適合作為ControllerPlugin執行,也可能更適合作為您的某個服務提供的功能。

要編寫自己的ControllerPlugin,請執行以下操作:

namespace Yournamespace\Controller\Plugin;

use Zend\Mvc\Controller\Plugin\AbstractPlugin;

class YourPlugin extends AbstractPlugin
{
    public function doSomething()
    {
        // ...
    }
}

在配置中注冊您的插件,在getConfig()內部使用top-level-array-key或在您的Modules getControllerPluginConfig()內部,而不使用頂級:

'controller_plugins' => array(
    'invokables' => array(
        'yourPlugin' => 'Yournamespace\Controller\Plugin\YourPlugin',
    )
),

並簡單地使用它:

public function indexAction()
{
    $plugin = $this->yourPlugin();
    $plugin->doSomething();

    return new ViewModel();
}

如果你只想調用$this->yourPlugin($paramX, $paramY) ,那么你必須為你的ControllerPlugin定義一個__invoke()方法。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM