我目前面临以下问题:请求的发布数据似乎在某些时候被清除。
情况:
在sf2应用程序中,我在“/ foo”处有一个自定义表单。它发布了2个属性:{"sort":"sort","property":"barcode"}
问题:
应该处理它的控制器在dev env中运行得很好,但在PROD环境中不起作用。调查显示,这是由于缺乏公布的数据。因此,我根据以下thread进行了2种日志方法。
1)通过内核侦听器进行日志记录。
我有一个Library::logtxt('text')
函数,每次调用时都会在日志文件中写入一行“text”。我把它放在处理请求的控制器中。
在内核侦听器中,我有以下方法:
public function onKernelRequest(GetResponseEvent $event)
{
if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
// don't do anything if it's not the master request
return;
}
//this is master request: do something.
Library::logtxt('($post: '.json_encode($_POST).')');
}
分别使用app_dev.php和app.php调用它,我得到: 从web / app_dev.php登录:
16:42:28 - Acme\DemoBundle\RequestListener:
($post: {"sort":"sort","property":"barcode"})
--------------------------------------------
16:42:28 - Acme\DemoBundle\Controller\FooController:
fooControllerAction called ($post: {"sort":"sort","property":"barcode"})
从web / app.php登录:
16:42:28 - Acme\DemoBundle\RequestListener:
($post: [])
--------------------------------------------
16:42:28 - Acme\DemoBundle\Controller\FooController:
fooControllerAction called ($post: [])
2)为确保发布的数据确实已发送,我只能在web / app.php中使用Library :: logtxt('')记录器。我明白了: app.php:
16:44:07 - :
in app.php ($post: {"sort":"sort","property":"barcode"})
--------------------------------------------
16:44:07 - :
in app.php ($post: [])
--------------------------------------------
16:44:07 - Acme\DemoBundle\Controller\FooController:
fooControllerAction called ($post: [])
--------------------------------------------
解决方案
这似乎表明生产中发生了“破坏”发布数据的事情。有人知道这里有什么危险吗?
编辑: 差异似乎是对config_dev.yml的影响。
framework:
router:
resource: "%kernel.root_dir%/config/routing_dev.yml"
strict_requirements: true
profiler: { only_exceptions: false }
当评论时,app_dev.php会像app.php一样被搞砸。如果没有,app_dev.php有效......
非常感谢提前照顾
此致
编辑:
应用程序/配置/ routing.yml中
hwi_oauth_security:
resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
prefix: /connect
hwi_oauth_connect:
resource: "@HWIOAuthBundle/Resources/config/routing/connect.xml"
prefix: /connect
#FOS :
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
fos_user_profile:
resource: "@FOSUserBundle/Resources/config/routing/profile.xml"
prefix: /profile
google_login:
pattern: /login/check-google
acme_user:
resource: "@AcmeUserBundle/Resources/config/routing.yml"
prefix: /
acme_a:
resource: "@AcmeABundle/Resources/config/routing.yml"
prefix: /
acme_another:
resource: "@AcmeAnotherBundle/Resources/config/routing.yml"
prefix: /another/
应用程序/配置/ routing_dev.yml:
_wdt:
resource: "@WebProfilerBundle/Resources/config/routing/wdt.xml"
prefix: /_wdt
_profiler:
resource: "@WebProfilerBundle/Resources/config/routing/profiler.xml"
prefix: /_profiler
_configurator:
resource: "@SensioDistributionBundle/Resources/config/routing/webconfigurator.xml"
prefix: /_configurator
_console:
resource: "@CoreSphereConsoleBundle/Resources/config/routing.yml"
prefix: /_console
_main:
resource: routing.yml
答案 0 :(得分:0)
您是否尝试过使用Request
对象而不是$_POST
:
Library::logtxt('($post: ' . $event->getRequest()->request->all() . ')');
你在这里也得到一个空数组吗?
答案 1 :(得分:0)
如有任何问题,请检查app/logs/prod.log
。
您还应该运行app/console --env=prod cache:clear
以确保安全。
如上所述here,您应该使用php app/console router:debug
检查所有路由是否配置正确。
如果这些都没有帮助,请发布您的routing.yml
和routing_dev.yml
。我的猜测是,这是一个路由问题,在内部重定向您的请求,并在中间丢失post
信息。