[英]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.