0

这是我的问题。

情况

我正在调试 symfony2 应用程序(发布的数据有一些问题)。这一次,我检查了在处理请求时 app.php 和 app_dev.php 被调用了多少次。

示例:请求(来自浏览器):/demo/display/foos

app.php 中的记录器(resp.app_dev.php):

//logger function 
function logtxt($logtxt, $name='myLog'){
  $fp = fopen($name.'.txt','a+');
  fseek($fp,SEEK_END);
  $newLog=date('H:i:s', time()).' - '.':'."\r\n".$logtxt."\r\n".'--------------------------------------------';
  fputs($fp,$newLog);
  fclose($fp); //basta
}

//logger call
logtxt('in app_dev.php ('.$_SERVER['SCRIPT_FILENAME'].')');

每次调用 logtxt 时,它基本上都会在日志文件中添加一行。

问题

看来,在我的应用程序中,app_dev.php 为单个请求多次调用(大多数是 2 次或 3 次)。我尝试了一个空项目:app.php 或 app_dev.php 仅在每次请求时按时调用。

我正在考虑我会做的重定向,但情况并非总是如此。更神奇的是,同一请求的 app.php 日志计数和 app_dev.php 日志计数有时会有所不同!

我不明白为什么要在请求中多次调用前端控制器。此外,它似乎对生产有一些影响。例如,在一个旧项目中,$_POST 在这些调用之间被重置,并且它的数据似乎丢失了(!)。

例如,对于 1 个相同的请求,我将在 dev 和 prod 环境中拥有:

15:45:51 - in app_dev.php:
in app_dev.php ($post: {"sort":"sort","property":"barcode"})

15:45:51 - in foo Controller:
fooControllerAction called ($post: {"sort":"sort","property":"barcode"})
--------------------------------------------
15:45:52 - in app_dev.php:
in app_dev.php ($post: [])
--------------------------------------------

而使用 app.php 日志:

15:44:07 - in app.php:
in app.php ($post: {"sort":"sort","property":"barcode"})

--------------------------------------------
15:44:07 - in app.php:
in app.php ($post: [])
--------------------------------------------
15:44:07 - in fooController:
fooControllerAction called ($post: [])
--------------------------------------------

结果:发布的变量可由控制器在开发环境中使用,但不能在生产环境中用于相同的请求:

解决方案

有人知道这种行为吗?我渴望了解证明这一点的背景,并检查它是否不会导致错误。另外,如果这是由于糟糕的开发实践,我会改变我的。

非常感谢您分享您的智慧!

干杯,

4

1 回答 1

1

要设置内核侦听器,请参阅此页面:

http://symfony.com/doc/current/cookbook/service_container/event_listener.html

...特别是涵盖请求侦听器的本节:

http://symfony.com/doc/current/cookbook/service_container/event_listener.html#request-events-checking-types

您在这里有一个关于如何检测请求是否为subrequest或的示例master;)

当您检测到HttpKernel::MASTER_REQUEST您的请求类型时,您可以应用您在问题中显示的相同逻辑......

于 2014-05-20T14:00:56.663 回答