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: app/config/routing.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 }

更新 6:解決済み - 問題は、理解不足のため、routing.yml に残されているデフォルトのコントローラーでした。

4

1 に答える 1

0

Symfony には、Web ディレクトリ内のアプリケーションへの 2 つのアクセス ポイントがあります。

  • 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 に答える