从symfony 2开始(app_dev.php有效,app.php 404)

rea*_*527 4 symfony

我正在关注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:   /
Run Code Online (Sandbox Code Playgroud)

应该是,然后我的src/Acme/HelloBundle/Resources/config/routing.yml有

hello:
    path:     /hello/{name}
    defaults: { _controller: AcmeHelloBundle:Hello:index }
Run Code Online (Sandbox Code Playgroud)

有没有人对这个问题有什么建议?(我也尝试将开箱即用的演示转换为生产路线,通过从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');
    }
}
Run Code Online (Sandbox Code Playgroud)

---第二次编辑---

我发现了这个问题.我觉得很奇怪,prod日志中没有任何东西出现,所以我想也许有些东西正在重定向我,导致我完全错过了app.php文件.

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

小智 11

我也有同样的问题.我分享我是如何解决它的(奇怪但它有效).

在文件web/app.php中更改:

$kernel = new AppKernel('prod', false);
Run Code Online (Sandbox Code Playgroud)

通过

$kernel = new AppKernel('prod', true); // Enable debug mode
Run Code Online (Sandbox Code Playgroud)

然后在浏览器中加载页面(在应用程序环境中)并再次更改文件以禁用调试:

$kernel = new AppKernel('prod', false);
Run Code Online (Sandbox Code Playgroud)

尝试再次在浏览器中加载页面.它应该正常工作.

最好的祝福,


Oli*_*nig 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.
Run Code Online (Sandbox Code Playgroud)

让它工作的最简单方法是使用app_dev.php而不是app.php.

只需编辑.htaccess并将所有出现的app.php更改为app_dev.php,如下所示:

第6行:

DirectoryIndex app_dev.php
Run Code Online (Sandbox Code Playgroud)

第41行:

RewriteRule .? %{ENV:BASE}/app_dev.php [L]
Run Code Online (Sandbox Code Playgroud)