这是我的问题。
场合
我正在调试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在这些调用之间重置,其数据似乎丢失(!)。
例如,对于同一个请求,我将在dev和prod envs中使用: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 log:
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: [])
--------------------------------------------
后果: 对于相同的请求,发布的变量可以在开发环境中由控制器使用,但不能在prod环境中使用:
解决方案
有人知道这种行为吗?我渴望了解背景证明这一点,并检查它是否会导致错误。此外,如果这是由于糟糕的开发练习,我会改变我的。
提前感谢您分享您的智慧!
干杯,
答案 0 :(得分:1)
有关设置内核侦听器的信息,请参阅此页面:
http://symfony.com/doc/current/cookbook/service_container/event_listener.html
...特别是本节涵盖了请求监听器:
这里有一个关于如何检测请求是subrequest
还是master
的示例;)
当您检测到HttpKernel::MASTER_REQUEST
作为您的请求类型时,您可以应用您在问题中显示的相同逻辑...