【问题标题】:How do get Phalcon Session from the DI in a standalone class如何在独立类中从 DI 获取 Phalcon Session
【发布时间】:2015-01-06 06:58:08
【问题描述】:

我在我的 Phalcon 项目中创建了一个类。我想从DI 获取session 服务,以便检查是否设置了变量。

我试过了:

$di = Phalcon\DI::getDefault();
echo $di->get("session")->get("user_id");
exit;

但是它回来说A session had already been started - ignoring session_start()

use Phalcon\Mvc\Model\Resultset\Simple, Phalcon\Mvc\User\Plugin;

class JsonReturnObject extends Plugin

我的会话服务是这样注册的:

<?php

use Phalcon\Mvc\View;
use Phalcon\DI\FactoryDefault;
use Phalcon\Mvc\Dispatcher;
use Phalcon\Mvc\Url as UrlProvider;
use Phalcon\Mvc\View\Engine\Volt as VoltEngine;
use Phalcon\Mvc\Model\Metadata\Memory as MetaData;
use Phalcon\Session\Adapter\Files as SessionAdapter;  
use Phalcon\Flash\Session as FlashSession;       
use Phalcon\Events\Manager as EventsManager;  

//setup the dependency injection
$di = new FactoryDefault();

//setup the session
$di->set('session', function() {
    $session = new SessionAdapter();
    $session->start();
    return $session;
});

任何帮助将不胜感激。

【问题讨论】:

    标签: session phalcon


    【解决方案1】:

    尝试像这样将会话注册为非共享组件:

    $di->set(
        'session',
        function () {
            $session = new \Phlacon\Session\Adapter\Files();
            $session->start();
    
            return $session;
         }
     );
    

    注意$di-&gt;set()上的第三个参数不是true

    或者使用$di-&gt;set() 代替$di-&gt;setShared()

    【讨论】:

    • 谢谢。查看我的更新 - 我的会话或多或少以相同的方式注册。
    • 所以在注册和启动会话之前,有些东西正在您的应用程序中启动会话。尝试将会话注册放在引导代码或 services.php 文件顶部的 DI 中 - 看看是否有帮助
    • 查看我的编辑 - 不幸的是,这没有帮助。在代码的许多其他部分,我在获取会话方面没有问题,所以不确定是什么!
    • 对我来说,当我在我的代码中调用 $di-&gt;get("session")-&gt;get("user_id"); 时,似乎会话正在尝试再次启动,因为那是它说会话已经开始的时候(因为它应该从在di注册时开始的)
    【解决方案2】:

    解决方法是使用setShared 将服务设置为共享。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 2016-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      相关资源
      最近更新 更多