0

我昨天将我的项目从 3.0 更新到 Symfony 3.1.2,现在看到重定向的奇怪行为。

通过 Symfony 进行的任何重定向(例如,返回 $this->redirectToRoute( ... ))都会显示页面,并且在我的内容下方显示 PDOException。

DataCollector.php 第 36 行中的 PDOException:您无法序列化或反序列化 PDO 实例

回溯是:

in DataCollector.php line 36
at PDO->__sleep()
at serialize(array('method' => 'GET', 'format' => 'html', 'content' => '', 'content_type' => 'text/html; charset=UTF-8', 'status_text' => 'OK', 'status_code' => '200', 'request_query' => array(), 'request_request' => array(), 'request_headers' => array('accept' => array('text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'), 'accept-encoding' => array('gzip, deflate'), 'accept-language' => array('en-US,en;q=0.5'), 'connection' => array('keep-alive'), 'cookie' => array('PHPSESSID=9ccvvokhon6i88bghai090eul3'), 'host' => array('wwui.dev.dpc'), 'referer' => array('http://wwui.dev.dpc/query/lothistory'), 'user-agent' => array('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:47.0) Gecko/20100101 Firefox/47.0'), 'x-php-ob-level' => array('1')), 'request_server' => array('SCRIPT_URL' => '/', 'SCRIPT_URI' => 'http://wwui.dev.dpc/', 'symfonyEnvironment' => 'dev', 'HTTP_HOST' => 'wwui.dev.dpc', 'HTTP_USER_AGENT' => 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:47.0) Gecko/20100101 Firefox/47.0', 'HTTP_ACCEPT' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'HTTP_ACCEPT_LANGUAGE' => 'en-US,en;q=0.5', 'HTTP_ACCEPT_ENCODING' => 'gzip, deflate', 'HTTP_REFERER' => 'http://wwui.dev.dpc/query/lothistory', 'HTTP_COOKIE' => 'PHPSESSID=9ccvvokhon6i88bghai090eul3', 'HTTP_CONNECTION' => 'keep-alive', 'PATH' => '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/root/.composer/vendor/bin', 'SERVER_SIGNATURE' => '<address>Apache/2.4.7 (Ubuntu) Server at wwui.dev.dpc Port 80</address> ', 'SERVER_SOFTWARE' => 'Apache/2.4.7 (Ubuntu)', 'SERVER_NAME' => 'wwui.dev.dpc', 'SERVER_ADDR' => '172.24.100.15', 'SERVER_PORT' => '80', 'REMOTE_ADDR' => '172.24.91.1', 'DOCUMENT_ROOT' => '/Volumes/Data01/VMShares/BeckComputerSystems/WarehouseWebUserInterface/WWUI/web', 'REQUEST_SCHEME' => 'http', 'CONTEXT_PREFIX' => '', 'CONTEXT_DOCUMENT_ROOT' => '/Volumes/Data01/VMShares/BeckComputerSystems/WarehouseWebUserInterface/WWUI/web', 'SERVER_ADMIN' => '[no address given]', 'SCRIPT_FILENAME' => '/Volumes/Data01/VMShares/BeckComputerSystems/WarehouseWebUserInterface/WWUI/web/index.php', 'REMOTE_PORT' => '57589', 'GATEWAY_INTERFACE' => 'CGI/1.1', 'SERVER_PROTOCOL' => 'HTTP/1.1', 'REQUEST_METHOD' => 'GET', 'QUERY_STRING' => '', 'REQUEST_URI' => '/', 'SCRIPT_NAME' => '/index.php', 'PHP_SELF' => '/index.php', 'REQUEST_TIME_FLOAT' => '1469740535.875', 'REQUEST_TIME' => '1469740535'), 'request_cookies' => array('PHPSESSID' => '9ccvvokhon6i88bghai090eul3'), 'request_attributes' => array('_controller' => 'SiteBundle\Controller\SiteController::homeAction', '_route' => 'home', '_route_params' => array(), '_redirected' => 'true'), 'response_headers' => array('cache-control' => array('no-cache'), 'content-type' => array('text/html; charset=UTF-8'), 'x-debug-token' => array('96da99')), 'session_metadata' => array('Created' => 'Thu, 28 Jul 16 11:23:35 -0700', 'Last used' => 'Thu, 28 Jul 16 14:15:35 -0700', 'Lifetime' => '0'), 'session_attributes' => array('_csrf/authenticate' => 'WW2UtiwmjvKvT89GZm6uKZQnqqFE5vCV9tnczHYzDE8', 'userId' => '8', '_security_wwui' => 'C:41:"Bcs\BcsVmsUserBundle\Library\VmsUserToken":733:{a:3:{i:0;N;i:1;s:4:"wwui";i:2;s:693:"a:4:{i:0;C:35:"Bcs\BcsVmsUserBundle\Entity\VmsUser":72:{a:4:{i:0;i:8;i:1;s:10:"dpatterson";i:2;s:16:"DF61DA91CA0D01BB";i:3;b:0;}}i:1;b:1;i:2;a:4:{i:0;O:41:"Symfony\Component\Security\Core\Role\Role":1:{s:47:"Symfony\Component\Security\Core\Role\Rolerole";s:9:"ROLE_USER";}i:1;O:41:"Symfony\Component\Security\Core\Role\Role":1:{s:47:"Symfony\Component\Security\Core\Role\Rolerole";s:12:"ROLE_BCS$MGR";}i:2;O:41:"Symfony\Component\Security\Core\Role\Role":1:{s:47:"Symfony\Component\Security\Core\Role\Rolerole";s:13:"ROLE_WUI$USER";}i:3;O:41:"Symfony\Component\Security\Core\Role\Role":1:{s:47:"Symfony\Component\Security\Core\Role\Rolerole";s:22:"ROLE_SYMFONY_DEVELOPER";}}i:3;a:0:{}}";}}', '_csrf/customer_lookup_form' => 'A2jcgcM93KEVytEJtKsJcAxzuy2bWaCu2_AhuBMTi08', '_csrf/activity_query_form' => 'eXHaEcHTWcm0YpoyKy1xP-WVoLaE1Ahs9QWZMns9A6Y', '_csrf/product_lookup_form' => 'CX383_4bu1vUJxoHSvXCcFV7RIcgu_FVrMheVgWy2PM', '_csrf/lot_history_query_form' => 'kNCivPd8p92O3DZvWibNSnrgruhW-LUmkI8kiGi-w2s', '_csrf/lot_lookup_form' => 'VnHPXtUL4EarAwGdUuxt1UTCyiY4U1EnaZG-mlyJmdo', 'VmsSequenceNumber' => '30', '_csrf/inventory_status_query_form' => 'hGSVMlviAjfr2QvDja2MYWWnSb693oYK3mq-ub2Vpn4', '_csrf/historical_inventory_query_form' => 'CfblRdIk-imBFDVB7vdodxhxHtursQ7FWV2W8pqIPtk', '_csrf/open_invoice_aging_query_form' => 'w_cjE_LrzKUARvN8Jb09YviThS1HpT0tJDA--s0sHCY', 'sf_redirect' => array('token' => '60047a', 'route' => 'debug', 'method' => 'GET', 'controller' => array('class' => 'SiteBundle\Controller\DebugController', 'method' => 'AdhocAction', 'file' => '/Volumes/Data01/VMShares/BeckComputerSystems/WarehouseWebUserInterface/WWUI/src/SiteBundle/Controller/DebugController.php', 'line' => '84'), 'status_code' => '302', 'status_text' => 'Found')), 'flashes' => array(), 'path_info' => '/', 'controller' => array('class' => 'SiteBundle\Controller\SiteController', 'method' => 'homeAction', 'file' => '/Volumes/Data01/VMShares/BeckComputerSystems/WarehouseWebUserInterface/WWUI/src/SiteBundle/Controller/SiteController.php', 'line' => '101'), 'locale' => 'en', 'redirect' => object(Session))) in DataCollector.php line 36
at DataCollector->serialize()
at serialize(array('token' => '96da99', 'parent' => null, 'children' => array(), 'data' => array('request' => object(RequestDataCollector), 'time' => object(TimeDataCollector), 'memory' => object(MemoryDataCollector), 'ajax' => object(AjaxDataCollector), 'form' => object(FormDataCollector), 'exception' => object(ExceptionDataCollector), 'logger' => object(LoggerDataCollector), 'events' => object(EventDataCollector), 'router' => object(RouterDataCollector), 'security' => object(SecurityDataCollector), 'twig' => object(TwigDataCollector), 'db' => object(DoctrineDataCollector), 'swiftmailer' => object(MessageDataCollector), 'dump' => object(DumpDataCollector), 'connx' => object(ConnxDataCollector), 'config' => object(ConfigDataCollector)), 'ip' => '172.24.91.1', 'method' => 'GET', 'url' => 'http://wwui.dev.dpc/', 'time' => '1469740536', 'status_code' => '200')) in FileProfilerStorage.php line 158
at FileProfilerStorage->write(object(Profile)) in Profiler.php line 120
at Profiler->saveProfile(object(Profile)) in ProfilerListener.php line 120
at ProfilerListener->onKernelTerminate(object(PostResponseEvent), 'kernel.terminate', object(TraceableEventDispatcher))
at call_user_func(array(object(ProfilerListener), 'onKernelTerminate'), object(PostResponseEvent), 'kernel.terminate', object(TraceableEventDispatcher)) in WrappedListener.php line 61
at WrappedListener->__invoke(object(PostResponseEvent), 'kernel.terminate', object(ContainerAwareEventDispatcher))
at call_user_func(object(WrappedListener), object(PostResponseEvent), 'kernel.terminate', object(ContainerAwareEventDispatcher)) in classes.php line 2144
at EventDispatcher->doDispatch(array(object(WrappedListener), object(WrappedListener)), 'kernel.terminate', object(PostResponseEvent)) in classes.php line 2059
at EventDispatcher->dispatch('kernel.terminate', object(PostResponseEvent)) in TraceableEventDispatcher.php line 136
at TraceableEventDispatcher->dispatch('kernel.terminate', object(PostResponseEvent)) in bootstrap.php.cache line 3011
at HttpKernel->terminate(object(Request), object(Response)) in bootstrap.php.cache line 2317
at Kernel->terminate(object(Request), object(Response)) in index.php line 90

我花了最后几个小时试图追踪这个无济于事。有问题的行是调用 serialize() in Symfony\Component\HttpKernel\DataCollector\DataCollector::serialize()。我在那里设置了一个断点并查看了调试器中的数据,但还没有找到 PDO 实例。

所有其他页面正常加载。

只发生在开发环境中。

有没有其他人看到这个?

有什么建议么?

环境:

  • Ubuntu 14.04.4 LTS
  • PHP 7.0.7-4
  • Symfony 3.1.2
4

1 回答 1

0

这是由我的自定义 Session 类引起的,它扩展了默认的 Symfony Session 类。

我的 Session 类包括在从会话中检索到 Doctrine 实体时重新合并它们的逻辑。这需要访问 EntityManager。EntityManager 内部有一个 PDO 连接。由于 PDO 连接无法序列化,这就是错误的来源。

解决方案是在 Session 类中实现一个 __sleep() 方法,并从返回数组中省略 EntityManager。

奇怪的是,我在一年多前实现了我的自定义 Session 类,之前从未见过这个错误。

我最近做了一个apt-get升级。也许有一个小的 PHP 升级现在强制执行了。

于 2016-07-29T16:06:31.297 回答