4

私はsymfonyのチュートリアルに従っていましたが、障害にぶつかりました。

私のセットアップは現在のバージョンの xampp (Windows 上で実行) であるため、Apache と php は比較的最新です。

こちらの「クイックツアー」に従ってください:

http://symfony.com/doc/current/quick_tour/the_big_picture.html

すべてが開発環境でうまく機能しました。ただし、ガイドをもう少し進めて、こちらのガイドを使用して独自のテスト バンドルの作成を開始しました。

http://symfony.com/doc/current/book/page_creation.html

本番環境で正しく動作させることができません。(プリインストールされたデモと同じように、開発環境では問題なく動作します。

php app/console cache:clear --env=prod --no-debug コマンドを使用してキャッシュをクリアしようとしましたが、それは役に立ちませんでした (また、検索時にポップアップする唯一の提案のようです.

ルートを表示すると、「/hello/{name}」ルートがルートのリストに正しく表示されていることがわかります。

私の app/config/routing.yml には次のものがあります。

acme_hello:
    resource: "@AcmeHelloBundle/Resources/config/routing.yml"
    prefix:   /

当然のことですが、私の src/Acme/HelloBundle/Resources/config/routing.yml には

hello:
    path:     /hello/{name}
    defaults: { _controller: AcmeHelloBundle:Hello:index }

問題が何であるかについて誰か提案がありますか? (ルーティング情報を routing_dev.yml ファイルからコピーし、バンドルを appkernel.php ファイルに再割り当てすることで、すぐに使えるデモを本番ルートに変換しようとしましたが、同じ問題がありました)

- -編集 - -

リクエストごとに、ここに私の appkernel.php ファイルがあります

Symfony\Component\HttpKernel\Kernel を使用します。Symfony\Component\Config\Loader\LoaderInterface を使用します。

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new JMS\AopBundle\JMSAopBundle(),
            new JMS\DiExtraBundle\JMSDiExtraBundle($this),
            new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
            new Acme\HelloBundle\AcmeHelloBundle(),
            new Acme\DemoBundle\AcmeDemoBundle(),
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }

        return $bundles;
    }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
    }
}

---2回目の編集---

私は問題を見つけました。prod ログに何も表示されないのは奇妙だと思ったので、何かがリダイレクトされて、app.php ファイルが完全に失われたのではないかと考えました。

結局のところ、これが問題でした。Web フォルダー (symfony が事前構成されていたもの) にある .htaccess ファイルの内容を空にすると、すべてが魔法のように機能し始めました。

4

6 に答える 6

11

私も同じ問題を抱えていました。どのように解決したかを共有します(奇妙ですが機能します)。

ファイル web/app.php の変更:

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

$kernel = new AppKernel('prod', true); // Enable debug mode

次に、ブラウザー (アプリ環境) でページを読み込み、ファイルを再度変更してデバッグを無効にします。

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

ブラウザでページを再度ロードしてみてください。正しく動作するはずです。

よろしくお願いします、

于 2015-10-06T04:27:05.027 に答える
6

あなたが私のようで、チュートリアルからサンプル アプリケーションを取得して Apache で実行したいだけなら、これが役立つかもしれません。私は今、バージョン 2.5 で同じ問題に遭遇し、最終的にここで答えを見つけました:

http://symfony.com/doc/current/quick_tour/the_big_picture.html

The demo routes in our application are only available in the dev environment. 
Therefore, if you try to access the .../app.php/... URL, you'll get a 404 error.

これを機能させる最も簡単な方法は、app.php の代わりに app_dev.php を使用することです。

次のように、.htaccess を編集して、app.php をすべて app_dev.php に変更します。

6 行目:

DirectoryIndex app_dev.php

41 行目:

RewriteRule .? %{ENV:BASE}/app_dev.php [L]
于 2014-08-31T17:37:56.240 に答える
3

prod 環境用にキャッシュをウォームアップしようとしましたか? これを行うには、次のコマンドを実行します。

php app/console cache:warmup --env=prod --no-debug

また、実行してルートを確認することもできます

php app/console router:debug

ルートに関する特定の情報を取得したい場合は、php app/console router:debug yourRouteName. しかし、それは「ルートを表示する」という意味だったのかもしれません。

もう 1 つのヒントはAssets に関するものです。通常、アプリを dev 環境から prod 環境に移動する場合は、次のコマンドを実行する必要があります。

php app/console assets:install web_directory
php app/console assetic:dump web_directory

Assetic:dump は、CSS スタイルシートや JavaScript ファイルなどのアセットを物理的に生成します。これについて詳しく読むための何かがここにあります

おそらく、投稿を編集して AppKernel.php を投稿できますか? バンドルがそこでアクティブ化されていない可能性がありますか?

于 2013-04-26T20:06:28.370 に答える
1

私は問題を見つけました。prod ログに何も表示されないのは奇妙だと思ったので、何かが私をリダイレクトしていて、app.php ファイルを完全に見逃しているのではないかと考えました。

結局のところ、これが問題でした。Web フォルダー (symfony が事前構成されていたもの) にある .htaccess ファイルの内容を空にすると、すべてが魔法のように機能し始めました。

于 2013-04-29T16:40:06.140 に答える