php - ZF2 MVC 全局函数

标签 php inheritance zend-framework2

将一个函数/方法设为多个 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.phpConfig\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/

相关文章:

当父类(super class)有dao调用时java继承行为?

C++:对用户隐藏类构造

zend-framework2 - Zend Framework 2 中的工厂类与闭包

php - 解决INSERT INTO语句的语法错误

php - 存储数据的奇怪字符编码,旧脚本显示它们很好,新脚本却没有

php - Symfony2 : Left Join producing wrong query

doctrine-orm - 有没有办法在 Zend Framework 2 中将 Firebird/Ibase 与 Doctrine 一起使用?

php - PHP/MySQLi 中的大量参数绑定(bind)

c++ - 为什么编译器在使用 CRTP 时看不到基类的方法

zend-framework2 - 在 Zend Framework 2 中的何处放置自定义设置?