如何在控制台请求中克服ZF2会话启动

时间:2015-12-09 04:17:18

标签: php session zend-framework2

我正在使用控制台路由从终端运行ZF2操作。 正在运行的用户不是Apache,请求不是http请求。应用程序抛出一个错误,即它没有写入会话文件的权限。

在使用控制台路由时有没有办法避免会话?

1 个答案:

答案 0 :(得分:1)

请求类可以将控制台请求和http请求彼此区分开来。您可以使用它来识别请求类型并禁用或启用应用程序中的某些功能:

您可以在module.php文件中轻松使用此功能,例如在bootstrap方法中。我将使用会话示例from the ZF2 documentation来说明这是如何工作的:

<?php
use Zend\Mvc\MvcEvent;
use Zend\Http\Request as HttpRequest;
use Zend\Console\Request as ConsoleRequest;
use Zend\Session\SessionManager;
use Zend\Session\Container;

class Module
{
    public function onBootstrap(MvcEvent $event)
    {
        $eventManager        = $event->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);

        $this->bootstrapSession($event);
    }

    public function bootstrapSession(MvcEvent $event)
    {
        $request = $event->getRequest();

        if($request instanceof ConsoleRequest){
            // nothing to do
            return
        }

        $session = $event->getApplication()
                         ->getServiceManager()
                         ->get('Zend\Session\SessionManager');
        $session->start();

        //... remaining code for session
    }
}

当然,您可以考虑其他任何变体:

if(! $request instanceof HttpRequest){
    return;
}

if($request instanceof ConsoleRequest){
    //.. do something
}elseif($request instanceof HttpRequest){
    //.. do something else
}