草庐IT

php - ZF2 - 在调度监听器中设置 cookie

coder 2024-04-18 原文

如果设置了查询参数“源”,我想在监听器中设置一个 cookie。我尝试了以下但 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
            ]);
        }
    }

} 

--------------------------------更新------------ ------------------------

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'));

    }
}

最佳答案

您的代码似乎存在一些问题,我们可以先排除这些问题。

  • 您尚未提供有关如何附加监听器的代码
  • 不确定为什么要在请求中设置 cookie,是否要在响应中这样做?

附加事件监听器:

public function onBootstrap(MvcEvent $e)
{
  $eventManager = $e->getApplication()->getEventManager();
  $app  = $e->getApplication();
  $em = $app->getEventManager();

  // Attach event to attach listener after routing when query will be populated
  $em->attach(MvcEvent::EVENT_ROUTE, function($e) use ($eventManager) {
    $request = $e->getRequest();
    // attach our listener 
    $eventManager->attach(new DispatchListener($request));
  });
}

更新的 setCookie 方法:

public function setCookie(EventInterface $event) { 
    if ($source = $this->request->getQuery('source')) {
        $this->request->setCookies([
            'source' => $source
        ]);

        $request = $this->request;
        $cookieData = $request->getCookie('someCookie', 'default');
        var_dump($cookieData);
    }
}

var_dump 打印以下内容:

object(Zend\Http\Header\Cookie)[274]
  protected 'encodeValue' => boolean true
  private 'storage' (ArrayObject) => 
    array (size=1)
   'source' => string 'test' (length=4)

关于php - ZF2 - 在调度监听器中设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39139084/

有关php - ZF2 - 在调度监听器中设置 cookie的更多相关文章

  1. ruby-on-rails - 如何在 Rails 中设置路由的默认格式? - 2

    路由有如下代码:resources:orders,only:[:create],defaults:{format:'json'}resources:users,only:[:create,:update],defaults:{format:'json'}resources:delivery_types,only:[:index],defaults:{format:'json'}resources:time_corrections,only:[:index],defaults:{format:'json'}是否可以使用1个字符串为所有资源设置默认格式,每行不带“默认值”散列?谢谢。

  2. ruby-on-rails - Rails Cookie 问题 - 2

    我在ruby​​onrails应用程序中有以下新方法:defnewifcookies[:owner].empty?cookies[:owner]=SecureRandom.hexend@movie=Movie.new@movie.owner=cookies[:owner]end基本上,每个新用户都应该获得一个代码来识别他们(尽管只是通过cookie)。因此,当用户创建电影时,创建的cookie将存储在owner字段中。所以有两个问题:使用.empty?方法,当我从浏览器中删除cookie时,返回一个undefinedmethodempty?'对于nil:NilClass`当我确实已经在

  3. ruby-on-rails - environment.rb 中设置的常量在开发模式中消失 - 2

    了解Rails缓存如何工作的人可以真正帮助我。这是嵌套在Rails::Initializer.runblock中的代码:config.after_initializedoSomeClass.const_set'SOME_CONST','SOME_VAL'end现在,如果我运行script/server并发出请求,一切都很好。然而,在我的Rails应用程序的第二个请求中,一切都因单元化常量错误而变得糟糕。在生产模式下,我可以成功发出第二个请求,这意味着常量仍然存在。我已通过将以上内容更改为以下内容来解决问题:config.after_initializedorequire'some_cl

  4. ruby - Controller 中的 request.cookies 和 cookies 有什么区别? - 2

    request.cookies和RubyonRails中的cookies对象有区别吗?我目前正在尝试将带有cookie的请求从我的node.js服务器发送到我的ROR4应用程序。似乎在ROR应用程序中,request.cookies包含我发送的cookie,但是cookies对象(现有逻辑所基于的对象)没有它。我已经搜索了文档,但找不到任何相关内容。我错过了什么吗?感谢您的帮助。 最佳答案 理想情况下,request.cookies和cookies应该相同。但是,在POST(创建操作)请求中,rails会验证XSRFtoken。如果

  5. ruby - 如何打印出 Mechanized 存储的 cookie? - 2

    我正在使用mechanize登录网站,然后检索页面。我遇到了一些问题,我怀疑这是由于cookie中的某些值造成的。当Mechanize登录网站时,我假设它存储了cookie。如何通过Mechanize打印出存储在cookie中的所有数据? 最佳答案 代理有一个cookie方法。agent=Mechanize.newpage=agent.get("http://www.google.com/")agent.cookiesagent.cookies.to_scookie返回一个Mechanize::Cookiesobject

  6. ruby-on-rails - 如何在回形针 ruby​​ on rails 中设置默认图像 - 2

    最近我安装了Paperclipgem,我正在努力让默认图像在我的系统上工作,我将图像文件放在assets/images/pic.png中。这是我的模型User中的代码:has_attached_file:pic,:styles=>{:medium=>"300x300>",:thumb=>"100x100>"},:default_url=>'missing_:avatar.png'#:default_url=>'assets/images/avatar.png'has_attached_file:attach这是我的AddPicPaperClip迁移中的代码:defself.upadd_

  7. ruby-on-rails - Rails 中的类实例变量应该在互斥体中设置吗? - 2

    假设我的Rails项目中有一个设置实例变量的Ruby类。classSomethingdefself.objects@objects||=begin#somelogicthatbuildsanarray,whichisultimatelystoredin@objectsendendend是否可以多次设置@objects?是否有可能在一个请求期间,在上面的begin/end之间执行代码时,可以在第二个请求期间调用此方法?我想这实际上归结为Rails服务器实例如何fork的问题。我应该改用Mutex还是线程同步?例如:classSomethingdefself.objectsreturn@o

  8. ruby-on-rails - 如何在 ActionController::TestCase 请求中设置内容类型 - 2

    我试图像这样在我的测试用例中执行获取:request.env['CONTENT_TYPE']='application/json'get:index,:application_name=>"Heka"虽然,它失败了:ActionView::MissingTemplate:Missingtemplatealarm_events/indexwith{:handlers=>[:builder,:haml,:erb,:rjs,:rhtml,:rxml],:locale=>[:en,:en],:formats=>[:html]尽管在我的Controller中我有:respond_to:html,

  9. ruby-on-rails - 在条件路由期间未在 Rails 3 中设置 request.subdomain - 2

    我正在尝试根据RyanBatesscreencastonsubdomains在Rails3中设置子域.但是它对我不起作用。我有以下设置:#routes.rbconstraints(Subdomain)doget'devices'=>'devices#all'end#lib/subdomain.rbclassSubdomaindefself.matches?(request)#binding.pryrequest.subdomain.present?&&request.subdomain=="admin"endend加载urladmin.localhost:3000/devices应该将

  10. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

随机推荐