我正在关注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预先配置的文件),然后一切都神奇地开始工作。答案 0 :(得分:11)
我也有同样的问题。我分享我是如何解决它的(奇怪但它有效)。
在文件web / app.php中更改:
$kernel = new AppKernel('prod', false);
通过
$kernel = new AppKernel('prod', true); // Enable debug mode
然后在浏览器中加载页面(在应用程序环境中)并再次更改文件,禁用debug:
$kernel = new AppKernel('prod', false);
尝试再次在浏览器中加载页面。它应该正常工作。
致以最诚挚的问候,
答案 1 :(得分: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]
答案 2 :(得分:3)
您是否尝试为prod环境预热缓存?您可以通过运行以下命令来执行此操作:
php app/console cache:warmup --env=prod --no-debug
您也可以通过
检查路线php app/console router:debug
如果您想获得路线的具体信息,可以php app/console router:debug yourRouteName
。但也许这就是你对“查看路线”的意思。
另一个提示与Assets有关。 通常,如果您将应用程序从dev移动到prod环境,则必须运行以下命令:
php app/console assets:install web_directory
php app/console assetic:dump web_directory
Assetic:dump物理创建您的资产,如css样式表或javascript文件。有关详细信息,请参阅here
也许您可以编辑帖子并发布AppKernel.php?也许捆绑没有在那里激活?
答案 3 :(得分:1)
答案 4 :(得分:1)
对我来说,这个问题是由缓存引起的。清除缓存后,新路由在prod environmment(app.php)上工作正常,没有404。
答案 5 :(得分:0)
我遇到了同样的问题。我通过首先使用以下命令从命令行清除缓存来解决问题:
php app / console cache:clear --env = prod
在此之后,我从app目录中删除了缓存文件夹本身(因为我仍然无法访问我的捆绑包但只有默认的Symfony主页),然后刷新浏览器并且错误消失了。
希望这有帮助。