Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Phalcon:在会话中存储配置_Php_Frameworks_Phalcon - Fatal编程技术网

Php Phalcon:在会话中存储配置

Php Phalcon:在会话中存储配置,php,frameworks,phalcon,Php,Frameworks,Phalcon,全新的Phalcon(和一般的框架),所以请原谅我的n00b 我想将配置加载到引导文件中,然后将其存储在会话中(因此只需加载一次,并且可以全局访问) 我已经创建了会话,并且正在成功地将配置信息加载到$Config中。但是如何在会话中存储$Config?由于我不在控制器中,因此无法使用$this->session。看来唯一的方法是将会话从DI中拉出,添加$config属性,然后重新设置DI的会话属性: $DI->setShared('session',function()){ $session=n

全新的Phalcon(和一般的框架),所以请原谅我的n00b

我想将配置加载到引导文件中,然后将其存储在会话中(因此只需加载一次,并且可以全局访问)

我已经创建了会话,并且正在成功地将配置信息加载到$Config中。但是如何在会话中存储$Config?由于我不在控制器中,因此无法使用
$this->session
。看来唯一的方法是将会话从DI中拉出,添加$config属性,然后重新设置DI的会话属性:

$DI->setShared('session',function()){
$session=new Phalcon\session\Adapter\Files();
if(session_status()=PHP_session_NONE)
$session->start();
返回$session;
});
$Config=require'../app/Config/Config.php';
$Session=$DI->get('Session');
$Session->config=$config;
$DI->setShared('session',$session);

虽然这似乎是一种非常低效的方法,将会话中的内容存储在引导中。这是唯一的方法还是我缺少了一些隐藏的功能?我想我可以手动创建会话(而不是在匿名函数中),设置“config”,然后使用
$DI->setShared()

存储它。我发现Vokuro示例应用程序是了解Phalcon应用程序结构的一种非常有用的方法。如果您试图使配置在控制器代码中可用,那么使用依赖项注入可能是您所需要的,您可能也不需要在会话中存储配置。祝您旅途好运。

您是否仅通过加载一次配置来加速应用程序?如果是这样的话,你有没有分析过这个应用程序,以确保它实际上是一个瓶颈

我有一个55行的配置文件,并且使用,我可以看到加载配置文件占用了我整个页面负载的0.04%。在我的情况下,可能有更容易的储蓄

您正在使用操作码缓存吗?我使用了多年,非常成功,但最近由于一些间歇性问题(这是PHP5.5中的标准)而改用了。根据我的经验,操作码缓存可以使速度提高50%,ymmv

如果你已经这样做了,但速度还不够快,那么我同意其他人的观点,并说在会话中存储配置不是一个好主意,因为每个访问者都有自己的配置,如果你有很多用户,内存使用也可能是一个问题,或者,如果您的会话存储在文件中,那么您可能会将一个配置文件替换为数百个

如果您认为缓存可能值得一试,可以这样做:改编自手册:

//Cache data for one hour
$frontCache = new Phalcon\Cache\Frontend\Data(array(
    "lifetime" => 3600
));

// Create the component that will cache "Data" to a "Memcached" backend
// Memcached connection settings
$cache = new Phalcon\Cache\Backend\Memcache($frontCache, array(
    "host" => "localhost",
    "port" => "11211"
));

// Try to get cached records
$cacheKey = 'site-config';
$config    = $cache->get($cacheKey);
if ($config === null) {
    $config = require '../app/config/config.php';

    // Store it in the cache
    $cache->save($cacheKey, $config);       
}

但我认为,在追求速度的过程中,您最好将时间花在其他地方。

配置中有什么,为什么要将其存储在会话中?它是特定于用户的吗?否则每个用户都会有一份相同的副本?你确定你不仅仅是在寻找缓存吗?不,它不是特定于用户的,只是特定于应用程序的属性(即:控制器/模型/视图目录的位置、数据库凭据、ACL等)。我将查看缓存-这可能是我想要的。因为如果您将其存储在会话中,它将为每个用户复制。这不是一个优化,而是减慢它。这可能是它是否可以优化的问题(在内存中存储和执行轻代码(apc)可能比在硬盘上存储轻代码快得多)。谢谢你的提示。如果我唯一的愿望是在处理请求时在整个应用程序中全局访问配置属性,那么我会使用依赖注入(DI)。但是,我正在尝试查看是否可以使配置信息在每个用户会话中仅读取一次,而不是在每个页面加载中读取一次。谢谢您的回答。我放弃这个想法的原因和你所说的差不多。是的,当然。[添加字符以达到限制]