找不到/的路由,即使路由已定义

时间:2013-06-16 17:27:53

标签: php symfony

当我尝试访问 app_dev.php 页面时,我收到以下错误:

No route found for "GET /"

问题是我定义了这条路线,我的routing.yml文件看起来像这样:

 0 v42homepage:
 1     pattern:  /
 2     defaults: { _controller: v42Bundle:Default:index }
 3
 4 v42meetTheTeamPage:
 5     pattern:  /meetTheTeam
 6     defaults: { _controller: v42Bundle:Default:meetTheTeam }
 7
 8 v42whatWeDoPage:
 9     pattern:  /whatWeDo
10     defaults: { _controller: v42Bundle:Default:whatWeDo }
11
12 v42contactUsPage:
13     pattern:  /contactUs
14     defaults: { _controller: v42Bundle:Default:contactUs }
15
16 v42homepage:
17     pattern:  /login
18     defaults: { _controller: v42Bundle:Default:login }

这是我的控制器:

<?php
 47
 46 namespace v42\WebsiteBundle\Controller;
 45
 44 use Symfony\Bundle\FrameworkBundle\Controller\Controller;
 43
 42 class DefaultController extends Controller
 41 {
 40     public function indexAction()
 39     {
 38         $templating = $this->container->get('templating');
 37
 36         $response = $templating->renderResponse('v42Bundle:Default:index.html.twig');
 35
 34         return $response;
 33     }
 32
 31     public function meetTheTeamAction()
 30     {
 29         $templating = $this->container->get('templating');
 28
 27         $response = $templating->renderResponse('v42Bundle:Default:meetTheTeam.html.twig');
 26
 25         return $response;
 24     }
 23
 22     public function whatWeDoAction()
 21     {
 20         $templating = $this->container->get('templating');
 19
 18         $response = $templating->renderResponse('v42Bundle:Default:whatWeDo.html.twig');
 17
 16         return $response;
 15     }
 14
 13     public function contactUsAction()
 12     {
 11         $templating = $this->container->get('templating');
 10
  9         $response = $templating->renderResponse('v42Bundle:Default:contactUs.html.twig');
  8
  7         return $response;
  6     }
  5
  4     public function loginAction()
  3     {
  2         $templating = $this->container->get('templating');
  1
  0         $response = $templating->renderResponse('v42Bundle:Default:login.html.twig');
  1
  2         return $response;
  3     }
  4
  5 }

我的所有其他路径都可以工作,但是在没有提供路径的情况下访问app_dev.php不会,即使这应该默认解析为我的路径。什么可能导致这种情况?

我已尝试使用Symfony的控制台程序清除缓存,如here所述。

由于

1 个答案:

答案 0 :(得分:2)

在路由配置中,所谓的pattern现在称为path。 旧密钥pattern已弃用,将在Symfony 3.0中删除。

参考here

如果您为开发环境使用不同的路由,即routing_dev.yml:

config_dev.yml

framework:
    router:   { resource: "%kernel.root_dir%/config/routing_dev.yml" }

您必须在routing_dev.yml

中导入生产路线

routing_dev.yml

# ... dev routes here ... i.e. _wdt, _profiler

_main:
    resource: routing.yml

此外,请确保不要覆盖routing_dev.yml中的/路由。

第一个匹配的路由模式总是胜出 - 路由之前在routing_dev.yml中导入routing.yml将覆盖。

但是......使用相同的路由名称会覆盖之前声明的路由名称。

您可以使用

检查应用程序中存在哪些路线
app/console router:debug

app/console router:debug --env=prod

问题:公布路线名称

v42homepage:
    pattern:  /

v42homepage:
    pattern:  /login

<强>溶液

将第二个v42homepage重命名为v42login以解决问题。