在每个控制器中使用 Zend 函数

Posted

技术标签:

【中文标题】在每个控制器中使用 Zend 函数【英文标题】:Use a Zend function in every controllers 【发布时间】:2021-12-08 07:23:59 【问题描述】:

我需要能够使用来自我的应用程序的不同控制器的函数(通过一些参数重定向)。

我需要使用 $this->_helper->redirector($param1, $param2),并在某个地方只声明一次。然后我会把这个功能放在其他控制器中。如果有一天我修改函数,我不需要在每个控制器中修改它。

我想我正在寻找的相当于 Symfony 的服务。

感谢您的帮助:)。

【问题讨论】:

您所描述的内容听起来像是Trait。创建一个包含该函数的 Trait,然后您可以在任意数量的控制器中使用该 Trait。 @rickdenhaan 谢谢。没有 Zend 工具可以做到吗? Zend / Laminas 启用控制器插件。这正是您正在寻找的。不要使用特征。 【参考方案1】:

您所要求的在 Laminas 或 Zend 中称为 controller plugin。你可以编写你自己的控制器插件,你可以在你想要的每个控制器中使用它。

<?php
declare(strict_types=1);
namespace Application\Controller\Plugin;

use Laminas\Mvc\Controller\Plugin\AbstractPlugin;

class YourPlugin extends AbstractPlugin

    public function __invoke($param1, $param2) 
    
        // your logic here
    

您无需在module.config.php 文件中提及此插件。

'controller_plugins' => [
    'aliases' => [
        'doSomething' => \Application\Controler\Plugin\YourPlugin::class,
    ],
    'factories' => [
        \Application\Controller\Plugin\YourPlugin::class => \Laminas\ServiceManager\Factory\InvokableFactory::class,
    ]
]

如果你想在你的控制器插件中使用一些依赖,你可以为你的插件编写你自己的工厂并通过注入添加这些依赖。

由于应用程序配置中提到了您的新插件,您可以在所需的每个控制器中调用您的插件。

<?php
declare(strict_types=1);
namespace Application\Controller;

class YourController extends AbstractActionController

    public function indexAction()
    
        $this->doSomething('bla', 'blubb');
    

请不要使用特征来解决您的问题。 Laminas / Zends 已经发布了一个重定向控制器插件。也许已经有现成的解决方案,或者您可以扩展重定向控制器插件...

【讨论】:

以上是关于在每个控制器中使用 Zend 函数的主要内容,如果未能解决你的问题,请参考以下文章

在 Zend 中如何实现复合视图?

使用Zend Framework创建cronjob

设置 zend 框架动作控制器

我可以在zend框架的cli命令中使用get Request()

在Zend控制器中添加表单的最佳方法是什么?

使用 zend 框架创建动态侧边栏的最佳实践