在每个控制器中使用 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 函数的主要内容,如果未能解决你的问题,请参考以下文章