3

我正在尝试使用 Symfony2 创建一个“Hello World”,它似乎是第一次运行,但是无论我做什么更改并保存控制器 - 前端都没有任何更改。

这是我的控制器的样子:

namespace Test\CalcBundle\Controller;

use Symfony\Component\HttpFoundation\Response;

class CalcController {

    public function indexAction($name) {

        return new Response("<html><body>Hello " . $name . "!</body></html>");

    }

}

无论我如何更改此文件 - 浏览器中都没有反映。这是否正在进行某种缓存,如果是,我该如何禁用它?浏览器没有缓存它,因为如果我更改 url 的最后一位 - 它会反映在页面上。

我在我的开发环境中运行它——Windows 8、PHP 5.5.3 (XAMPP)、Apache。

更新:抱歉,忘记添加,我使用的 URL 是这样的:

http://localhost/test/web/app_dev.php/Calc/name

UPDATE2:应用程序/配置/路由.yml:

test_calc:
    resource: "@TestCalcBundle/Resources/config/routing.yml"
    prefix:   /

src/Test/CalcBundle/Resources/config/routing.yml:

test_calc_homepage:
    pattern:  /Calc/{name}
    defaults: { _controller: TestCalcBundle:Default:index }

UPDATE3:我使用的 Symfony2 的确切版本是2.3.5

UPDATE4:找到原因 - 不知何故使用 DefaultController 而不是我创建的那个......我该如何解决这个问题?

UPDATE5:我设法解决了这个问题,虽然我不知道这是否是一个好方法。我已将其更改src/Test/CalcBundle/Resources/config/routing.yml为如下所示:

test_calc_homepage:
    pattern:  /Calc/{name}
    defaults: { _controller: TestCalcBundle:Calc:index }

UPDATE6:已解决 - 由于缺乏理解,问题是默认控制器留在 routing.yml 中。

4

1 回答 1

0

Symfony 在 web 目录中有两个访问应用程序的访问点

  • web/app.php(这是用于生产缓存处于活动状态)
  • web/app_dev.php(这是用于开发人员更改模板等内容时的缓存更改)

将浏览器指向http://localhost/app_dev.php

您可以在在 Symfony 2中创建页面中获得有关环境的更多信息

你可以检查你的文件是否正确

app.php

<?php

use Symfony\Component\ClassLoader\ApcClassLoader;
use Symfony\Component\HttpFoundation\Request;

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';

// Use APC for autoloading to improve performance.
// Change 'sf2' to a unique prefix in order to prevent cache key conflicts
// with other applications also using APC.
/*
$loader = new ApcClassLoader('sf2', $loader);
$loader->register(true);
*/

require_once __DIR__.'/../app/AppKernel.php';
//require_once __DIR__.'/../app/AppCache.php';

$kernel = new AppKernel('prod', false);
$kernel->loadClassCache();
//$kernel = new AppCache($kernel);
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

app_dev.php

<?php

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;

// If you don't want to setup permissions the proper way, just uncomment the following PHP line
// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
//umask(0000);

// 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'))
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
Debug::enable();

require_once __DIR__.'/../app/AppKernel.php';

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();
$kernel->terminate($request, $response);

这些是 sf 2.3.4 中的文件

sf 2.3.* 的项目需要该Debug::enable();行,检查文件中是否存在该行

于 2013-09-28T14:19:03.307 回答