Symfony2路由不受支持的密钥

时间:2014-09-30 11:49:27

标签: php eclipse symfony

我正在学习Symfony 2,但我遇到了一些问题。使用教程,我在routing.yml内部包中创建了这个路径:

acme_demo_homepage:
path:     /hello/{name}
defaults: { _controller: AcmeDemoBundle:Default:index }

random:
path:     /random/{limit}
defaults: { _controller: AcmeDemoBundle:Random:index }

并且Eclipse在声明defaults的行显示错误,并告诉我:是意外的。

我创建了控制器:

<?php
namespace Acme\DemoBundle\Controller;
use Symfony\Component\HttpFoundation\Response;

class RandomController
{


public function indexAction($limit)
{
    return new Response('<html><body>Number: '.rand(1, $limit).'</body></html>');
}

}

但是当我尝试执行localhost/app_dev.php/random/10时会出现此错误:

  

路由文件&#34; C:\ xampp \ htdocs \ progetti \ Symfony \ src \ Acme \ DemoBundle / Resources / config / routing.yml&#34;包含&#34; acme_demo_homepage&#34;:&#34;随机&#34;的不支持的键。预期的一个:&#34;资源&#34;,&#34;类型&#34;,&#34;前缀&#34;,&#34;模式&#34;,&#34;路径&#34;,& #34;主持人&#34;,&#34;计划&#34;,&#34;方法&#34;,&#34;默认&#34;,&#34;要求&#34;,&#34;选项&# 34;,&#34;条件&#34;。

3 个答案:

答案 0 :(得分:5)

我认为这是一个缩进问题。来自YAML规范:

  

在YAML块样式中,结构由缩进确定。

在   通常,缩进被定义为零个或多个空格字符   为了保持可移植性,不得在缩进中使用制表符,因为不同的系统会以不同方式处理制表符。请注意,可以配置大多数现代编辑器,以便按Tab键导致插入适当数量的空格
。   “

所以:

acme_demo_homepage:
    path:     /hello/{name}
    defaults: { _controller: AcmeDemoBundle:Default:index }

random:
    path:     /random/{limit}
    defaults: { _controller: AcmeDemoBundle:Random:index }

或者你可以用PHP设置你的路线(这是我的偏好)。例如:

<?php
 //src/Acme/DemoBundle/Resources/config/routing.php

use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

$collection = new RouteCollection();

# main route
$collection->add('_index', new Route('/dashboard/index/{page}/{year}/{month}', array(
    '_controller' => 'AcmeDashboardBundle:Default:index',
    'page'        => 1,
    'year'        => date('Y'),
    'month'       => date('n'),
)));

return $collection;
//end of file

答案 1 :(得分:0)

请注意,缩进在YAML中至关重要。如果您的实际routing.yml看起来像您发布的内容,则无法正确配置路由。以下是它的外观:

acme_demo_homepage:
    path:     /hello/{name}
    defaults: { _controller: AcmeDemoBundle:Default:index }

random:
    path:     /random/{limit}
    defaults: { _controller: AcmeDemoBundle:Random:index }

答案 2 :(得分:0)

您的yml文件的格式似乎是错误的。你需要考虑yml文件中的空格(记住不要使用制表符而不是空格) - 意图定义文件结构。

您的routing.yml文件应该是

acme_demo_homepage:
    path:     /hello/{name}
    defaults: { _controller: AcmeDemoBundle:Default:index }

random:
    path:     /random/{limit}
    defaults: { _controller: AcmeDemoBundle:Random:index }