处理请求时发布的变量丢失

时间:2014-05-20 15:25:53

标签: symfony post request

我目前面临以下问题:请求的发布数据似乎在某些时候被清除。

情况:

在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

2 个答案:

答案 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.ymlrouting_dev.yml。我的猜测是,这是一个路由问题,在内部重定向您的请求,并在中间丢失post信息。