Php zend框架插件

Php zend框架插件,php,zend-framework2,Php,Zend Framework2,$url=$\u服务器['SERVER\u NAME'] if(!filter_var($url, FILTER_VALIDATE_URL)){ return false; } return true;I need to connect plugin CheckDomain which loaded on pre dispatch with all modules except Admin. Plugin是一个类CheckDomain,可以作为函数调用Ch

$url=$\u服务器['SERVER\u NAME']

    if(!filter_var($url, FILTER_VALIDATE_URL)){
      return false;
    }
    return true;I need to  connect plugin CheckDomain which loaded on pre dispatch with all modules except Admin.
Plugin是一个类CheckDomain,可以作为函数调用
CheckDomain()
,当以这种方式调用它时,它会检查域是否等于“test.example.com”

如果您希望“连接”到每个模块,您应该阅读关于
MVC事件的zf2文档和
EventManager

下面是您的
应用程序/Module.php

public function onBootstrap(MvcEvent $e)
{
    $application =  $e->getApplication();
    $serviceManager = $application->getServiceManager();
    $eventManager = $application->getEventManager();
    $sharedManager = $eventManager->getSharedManager();

    // DISPATCH EVENT
    $sharedManager->attach('Zend\Mvc\Controller\AbstractActionController', 'dispatch', function( MvcEvent $e) use ($serviceManager) {

        $controller      = $e->getTarget();
        $controllerClass = get_class($controller);
        $moduleNamespace = substr($controllerClass, 0, strpos($controllerClass, '\\'));

        // this is the first segment from the module namespace
        // if the Admin Namespace is something like this Admin/Controller/...

        if( $moduleNamespace != 'Admin' ) {

            $CheckDomainPlugin = $serviceManager->get('ControllerPluginManager')->get('CheckDomainPlugin');
            // do something
        }
    }, 50 );
}

如果创建插件或任何服务,应用程序中的所有模块都可以使用它们。如果有不应该使用插件的区域,那么不要调用它

如果我真的理解你的问题;我会使用一个事件监听器。如果您侦听“在分派时”,您可以排除所有管理员控制器(如果您为它们提供唯一的接口)

 // Module.php
 public function onBootstrap($event)
 {
   $application = $event->getApplication();
   $eventManager = $application->getEventManager()->getSharedManager();

   $eventManager->attach(
     'Zend\Mvc\Controller\AbstractActionController', 
     'dispatch', 
     function($e) {
       $target = $e->getTarget(); // The dispatched controller

       if ($controller instanceof AdminControllerInterface) {
         return;
       }
       // Do something here
     }
   );
 }

你能更具体地说明你想要达到的目标吗?我在你的帖子上没有得到确切的问题。当你创建一个控制器插件时,它在每个模块控制器中都是可用的。我想为所有模块自动加载插件,除了adminIt,这几乎是我想要的!谢谢你,这几乎就是我想要的!非常感谢!
 // Module.php
 public function onBootstrap($event)
 {
   $application = $event->getApplication();
   $eventManager = $application->getEventManager()->getSharedManager();

   $eventManager->attach(
     'Zend\Mvc\Controller\AbstractActionController', 
     'dispatch', 
     function($e) {
       $target = $e->getTarget(); // The dispatched controller

       if ($controller instanceof AdminControllerInterface) {
         return;
       }
       // Do something here
     }
   );
 }