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');
    }
}

---第二次编辑---

我发现了问题。我认为 prod 日志中没有显示任何内容很奇怪,所以我想可能有什么东西正在重定向我,导致我完全错过了 app.php 文件。

事实证明,这就是问题所在。我清空了 web 文件夹中的 .htaccess 文件(symfony 预配置的那个),然后一切都神奇地开始工作了。

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_dev.php 而不是 app.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。但也许这就是你所说的“查看路线”。

另一个提示与Assets有关。通常,如果您将应用程序从开发环境移动到生产环境,您必须运行以下命令:

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 文件夹中的 .htaccess 文件(symfony 预配置的那个),然后一切都神奇地开始工作了。

于 2013-04-29T16:40:06.140 回答
1

对我来说,这个问题是由缓存引起的。清除缓存后,新路由在 prod 环境(app.php)上运行良好,没有 404。

于 2017-05-03T00:10:25.187 回答
0

我遇到了同样的问题。我通过首先使用以下命令从命令行清除缓存来解决此问题:

php app/console cache:clear --env=prod

在此之后,我从应用程序目录中删除了缓存文件夹本身(因为我仍然不能访问我的包,但只有默认的 Symfony 主页),然后刷新浏览器,错误就消失了。

希望这可以帮助。

于 2018-02-19T10:34:04.130 回答