将一个函数/方法设为多个 Controller 的应用程序全局函数的最佳做法是什么?
例如,假设我们有一个 Controller 。该 Controller 正在使用一个函数,但我们不想将其复制粘贴到另一个 Controller ,而只是想调用该函数。
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
的内容。那么,对于只在 Controller 上调用的函数,最佳做法是什么?
另外两个相关问题:
接受的答案中描述的插件将完成这项工作。但是在什么情况下您不想使用插件并会寻求其他解决方案?我只想让它亮起来,因为我没有找到足够的文档。
另一个兴趣点。如果这个插件也必须对多个模块可用怎么办?在应用程序中设置插件并在 Zend 的 module\Application\Config\module.config.php
或 Config\Autoload\Global.php
中设置应用程序?
最佳答案
您可能想查看几个 Zend\Mvc\Controller\Plugin
-提供的类(class)。最终,这完全取决于您的“全局功能”应该做什么。它可能适合作为 ControllerPlugin 来执行,也可能更适合作为您的一项服务提供的功能。
要编写自己的 ControllerPlugin,请按以下方式进行:
namespace Yournamespace\Controller\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
class YourPlugin extends AbstractPlugin
{
public function doSomething()
{
// ...
}
}
在配置中注册您的插件,在 getConfig()
中使用顶级数组键或在您的模块 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()
方法。
希望这对您有所帮助。
关于php - ZF2 MVC 全局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16438275/