我正在使用Symfony 1.2,我在切换上下文方面遇到了一些问题。
此代码工作正常:
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
$configuration = ProjectConfiguration::getApplicationConfiguration('account', 'prod', false);
$context = sfContext::createInstance($configuration, 'account-prod');
$userToLogin = PcUserPeer::retrieveByEmailAddress("myemail@example.com");
Auth::login($context->getUser(), $userToLogin, false, false);
echo "all done.";
在某些时候需求发生变化,我需要在“帐户”之前使用“公共”应用程序 然后我改为:
require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php');
// {{{ new code:
$configuration = ProjectConfiguration::getApplicationConfiguration('public', 'prod', false);
sfContext::createInstance($configuration);
// some code using the public app...
// }}}
$configuration = ProjectConfiguration::getApplicationConfiguration('account', 'prod', false);
$context = sfContext::createInstance($configuration, 'account-prod');
// {{{ new code:
sfContext::switchTo('account-prod');
// }}}
$userToLogin = PcUserPeer::retrieveByEmailAddress("myemail@example.com");
CustomAuth::login($context->getUser(), $userToLogin, false, false);
echo "all done.";
基本上我添加了一个switchTo调用。
更改后,代码被破坏,错误信息如下:
PHP Fatal error: Call to a member function prepare() on a non-object in /var/www/html/myproj/symfony/storage/sfPDOSessionStorage.class.php on line 109
感谢您的帮助,
丹
答案 0 :(得分:3)
Symfony正在尝试加载会话存储对象。我想您的新环境配置存在问题。
检查
/apps/public/config/factories.yml
查找“存储”并尝试找出它与其他应用程序的配置有何不同。
答案 1 :(得分:0)
很难知道没有回溯/更多信息是什么触发了错误。看起来您正在使用存储在数据库中的会话,并且与之相关的查询失败。
尝试将getApplicationConfiguration的第三个参数设置为true(这将启用调试)并查看是否获得更多输出。
猜测,看起来帐户应用程序正在使用PDO会话存储,并且无法连接到数据库或其他什么?