Я хотел бы установить cookie в прослушиватель, если задан параметр запроса «источник». Я попробовал следующее, но cookie не существует.ZF2 - Установить cookie в диспетчерском прослушивании
Как я могу установить cookie правильно?
class DispatchListener extends AbstractListenerAggregate {
public function attach(EventManagerInterface $eventManager) {
$this->listeners[] = $eventManager->getSharedManager()->attach(
'Zend\Stdlib\DispatchableInterface',
MvcEvent::EVENT_DISPATCH,
array($this, 'setCookie'),
-80
);
}
/**
* @var \Zend\Stdlib\RequestInterface
*/
protected $request;
/**
* @param \Zend\Stdlib\RequestInterface $request
*/
public function __construct(RequestInterface $request) {
$this->request = $request;
}
public function setCookie(EventInterface $event) {
if ($source = $this->request->getQuery('source')) {
$this->request->setCookies([
'source' => $source
]);
}
}
}
--------------------------------- UPDATE --------- --------------------------
class Module implements ConfigProviderInterface, BootstrapListenerInterface {
public function onBootstrap(EventInterface $event) {
$target = $event->getTarget();
$serviceManager = $target->getServiceManager();
$eventManager = $target->getEventManager();
$eventManager->attach($serviceManager->get('Application\Listener\Dispatch'));
}
}
Я добавил исходный код, в котором я придаю слушателя в моем Module.php. Если я попробую ваш код, я не получу тот же результат, что и вы. Файл cookie не установлен в моем случае. Я просто не хочу устанавливать этот файл cookie, если кто-то вызывает веб-сайт с параметром запроса 'source' :) –
Я все еще не совсем уверен, чего вы пытаетесь достичь, но мой метод работает. Теперь, я думаю, мне нужно будет увидеть ваш заводской код или код установщика для Application \ Listener \ Dispatch в локаторе службы, чтобы понять. Но если вы передаете правильный объект запроса, а событие запускается после события маршрута, оно должно работать. Но все еще не уверен, почему вы хотите установить cookie по запросу –