为什么Symfony 2使用app_dev.php而不是一个前端控制器?

时间:2015-06-23 16:39:33

标签: symfony

来自ZF背景我很惊讶地看到Symfony的app_dev.php文件。安全方面似乎是一个非常糟糕的想法。这是您需要采取的另一个步骤,以确保您的开发无法在生产中访问。即你不能有简单的Git部署,除非你不介意在生产中使用dev版本或者使用post checkout hook删除文件或禁用访问它的特定vhost设置。

它背后的想法是什么?为什么它比IP触发或基于ENV的开发模式更好?

3 个答案:

答案 0 :(得分:1)

首先,没有真正的&#34;生产&#34;和&#34; dev&#34;模式本身。他们只是这样命名。您可以轻松使用其他模式,每个模式都有自己的一组配置,例如通过config_<env>.yml加载。实际上,还有第三种称为&#34; test&#34;的标准模式。这是为测试Symfony而保留的。

其次,在&#34;生产&#34;中进行测试非常容易。模式和&#34;开发&#34;模式简单地在您的网址之间添加app_dev.php。这样可以更轻松地查看应用程序在生产中的实际效果,而不会丢失所有诸如详细日志记录和Web调试工具栏之类的好东西。

如上所述:默认情况下,app_dev.php前端默认使用白名单,因此即使您将此文件推送到生产环境中,他们也无法查看该文件。

多个入口点还有其他原因:因为Symfony应用程序可以同时包含多个应用程序。默认情况下,app.phpapp_dev.php是默认应用程序的前端控制器,但也可能(非常容易实际)拥有admin.phpadmin_dev.php,引导一个完全不同的应用程序,同时仍然是同一个存储库的一部分(如果这是明智的做法,可以讨论)。

答案 1 :(得分:1)

有一个问题#677正在讨论为什么会这样。相关问题#11310中也有一些有趣的评论。

对我来说,最合理的论据是,它只需在盒子外工作,而无需设置环境变量或其他任何东西。虽然反驳是你仍然需要设置htaccess重写。

答案 2 :(得分:0)

如果你查看app_dev.php文件,你会发现只有列入白名单的IP地址才能访问app_dev.php文件。

// This check prevents access to debug front controllers that are deployed by accident to production servers.
// Feel free to remove this, extend it, or make something more sophisticated.

if (isset($_SERVER['HTTP_CLIENT_IP'])
    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    || !(in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', 'fe80::1', '::1')) || php_sapi_name() === 'cli-server')
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}