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

pei*_*iam 6 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
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Ujj*_*jha 21

这很容易.只需检查是否RequestZend\Http\RequestHttp和Zend\Console\RequestConsole请求的实例.例如:

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
        }
    }  
}
Run Code Online (Sandbox Code Playgroud)


dav*_*ave 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
}
Run Code Online (Sandbox Code Playgroud)