Php zend框架插件
$url=$\u服务器['SERVER\u NAME']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
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
}
);
}