如何检测Zend Framework 2应用程序是否在控制台或HTTP上下文中运行?

时间:2014-01-27 05:09:41

标签: php zend-framework2

我正在编写一个模块,根据应用程序是在控制台还是HTTP上下文中运行来执行某些任务。有没有办法在模块加载时检测到这个?

例如,我尝试使用 Module.php 类进行此操作。

namespace MyModule;

use ...

class Module
{
    public function init(ModuleManager $mm)
    {
        if (Console context) {
            // do something
        } else {
            // do something with HTTP
        }
    } 
}

谢谢!

2 个答案:

答案 0 :(得分:21)

这很容易。只需检查Request是Http的Zend\Http\Request和控制台请求的Zend\Console\Request的实例。例如:

namespace Application;

use Zend\Mvc\MvcEvent;
use Zend\Http\Request as HttpRequest ;
use Zend\Console\Request as ConsoleRequest ;

class Module
{
    public function onBootstrap(MvcEvent $e)
    {
        if ($e->getRequest() instanceof HttpRequest) {
            // do something important for Http
        } elseif($e->getRequest() instanceof ConsoleRequest ) {
            // do something important for Console
        }
    }  
}

答案 1 :(得分:3)

您应该可以使用php_sapi_name()

  

虽然不是详尽无遗,但可能的返回值包括aolserver,apache,    apache2filter,apache2handler,caudium,cgi(直到PHP 5.3),cgi-fcgi,cli,continuity,    embed,isapi,litespeed,milter,nsapi,phttpd,pi3web,roxen,thttpd,tux和webjames。

所以我会这样做:

if (php_sapi_name() == 'cli') { 
  //console
} else {
  //not console
}