如何强制我的PHP Symfony项目保持开发模式?

时间:2016-08-10 11:19:14

标签: php symfony development-environment

如果我访问symfonyproject.local/app.php,它会使用生产环境。如果我访问symfonyproject.local/app_dev.php,它将使用开发环境。我想快速开发和测试,所以我需要任何URL来加载app_dev.php。

但是当我点击开发环境中的链接时,例如<a href='/users'>Link</a>,它显然会加载symfonyproject.local/users而不是我需要的symfonyproject.local/app_dev.php/users。如何强制点击开发环境中的链接以自动停留在开发环境中?是否有重写所有URL的功能,或者我必须自己创建它?

7 个答案:

答案 0 :(得分:5)

如果您使用路由器生成网址,那么它们会自动包含/app_dev.php/。请参阅Symfony Twig Extensions - path()

我个人不直接使用 app_dev.php 。我使用修改后的 .htaccess 指向 app_dev.php 而不是 app.php

答案 1 :(得分:2)

您应该使用url()方法来生成正确的链接

$this->url('@route');

或者更快,您可以更改文件app.php中的环境变量,但我不建议这样做。

答案 2 :(得分:2)

您可以考虑在httpd-vhosts.conf

中使用类似的内容
<VirtualHost *:80>
    ServerName localhost
    DocumentRoot "YOUR DOCUMENT ROOT"
    DirectoryIndex app_dev.php
    <Directory "YOUR DOCUMENT ROOT">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
        <IfModule mod_rewrite.c>
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ /app_dev.php [QSA,L]
        </IfModule>
    </Directory>
</VirtualHost>

它会添加一条规则,以便所有请求都会通过app_dev.php

  • 它只是前面提到的那些替代答案。

答案 3 :(得分:1)

您需要编辑Symfony安装的.htaccess文件夹中的/web文件。

您会在此文件的多个位置看到它引用app.php。将其更改为app_dev.php,整个项目将默认为开发模式,无处不在!

返回实时模式,将其更改回app.php

答案 4 :(得分:1)

我更喜欢修改前端控制器,因此它使用环境变量而不是硬编码环境和调试模式。这种工作方式还可以完全降低意外将开发前端控制器部署到生产服务器的风险,这是一个额外的好处。我只是从项目中删除了app_dev.php

app.php

<?php

use Composer\Autoload\ClassLoader;
use Symfony\Component\Debug\Debug;
use Symfony\Component\HttpFoundation\Request;

/**
 * @var ClassLoader $loader
 */
$loader = require __DIR__ . '/../app/autoload.php';

$env = getenv('SYMFONY_ENV') ?: 'prod';
$debug = getenv('SYMFONY_DEBUG') === '1' && $env !== 'prod';

if (!$debug) {
    require __DIR__ . '/../var/bootstrap.php.cache';
}

if ($debug) {
    Debug::enable();
}

$kernel = new AppKernel($env, $debug);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);

// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
//Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

现在我只需要设置环境变量,这可以使用Apache SetEnv指令来完成,例如虚拟主机配置。

SetEnv SYMFONY_ENV dev
SetEnv SYMFONY_DEBUG 1

答案 5 :(得分:0)

在Symfony 3中,您可以通过更新app.dev并更改以下内容来强制系统以开发模式运行:

$ kernel = new AppKernel('prod',false);

$ kernel = new AppKernel('dev',true);

然后,当您访问您的网站时,无需在URL中传递app_dev.php。

对于Symfony 4,您需要更新.env文件。

答案 6 :(得分:-3)

到目前为止一些好的答案但我不喜欢和.htaccess一起玩。太神奇了。所以我只是:

cd web
mv app.php app_prod.php
cp app_dev.php app.php

如果我需要重新投入生产,我只需将app_prod.php复制回app.php。