Я запускаю действие ZF2 с терминала, используя консольный маршрут. Бегущий пользователь не является Apache, и запрос не является HTTP-запросом. Приложение выдает сообщение об ошибке, что у него нет разрешения на запись файла сеанса.
Есть ли способ избежать сеанса, когда я использую консольный маршрут?
Запросы консоли и HTTP-запросы можно отличить от eachother классом запроса. Вы можете использовать это, чтобы распознать тип запроса и отключить или включить определенные функции в своем приложении:
Вы можете легко использовать это в файле module.php
например, в методе начальной загрузки. Я буду использовать пример сеанса из документации ZF2, чтобы показать, как это может работать:
<?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
}