Php 为什么不允许我合并;“类型”;加上;“违约”;在routing.yml中
问题的简短版本:Symfony的错误消息 说明我不能将Php 为什么不允许我合并;“类型”;加上;“违约”;在routing.yml中,php,symfony,Php,Symfony,问题的简短版本:Symfony的错误消息 说明我不能将类型键与 默认值,我只能与资源一起使用(请参见下面的详细信息)。 为什么会这样?我怎样才能修好它 详细版本: 以下是我在Symfony所做的事情的确切顺序: composer create-project symfony/framework-standard-edition sym-book/ '~2.5' php app/console generate:bundle --namespace=MiddleMan/BookBundle --f
类型
键与
默认值
,我只能与资源一起使用(请参见下面的详细信息)。
为什么会这样?我怎样才能修好它
详细版本:
以下是我在Symfony所做的事情的确切顺序:
composer create-project symfony/framework-standard-edition sym-book/ '~2.5'
php app/console generate:bundle --namespace=MiddleMan/BookBundle --format=yml
编辑src/MiddleMan/BookBundle/Resources/config/routing.yml的内容
middle_man_book_example:
path: /example
defaults: { _controller: MiddleManBookBundle:Lucky:number }
type: annotation
在目录src/MiddleMan/BookBundle/Controller
中,
将DefaultController.php
重命名为LuckyController.php
,并将其内容编辑为
namespace MiddleMan\BookBundle\Controller;
class LuckyController
{
/**
* @Route("/lucky/number")
*/
public function numberAction()
{
$number = rand(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
如果您使用的是type:annotation
,则不需要(实际上也不可以)在routing.yml中存储defaults
部分。默认值部分将在其自己的注释中为每个管线配置,管线注释如下所示:
/**
* Sample route
* @Route("/{id}", name="sample-route-name", defaults={"id" = 1})
* //defaults section is there to provide default values
*
* @Method({"GET", "POST"}) // not actually needed, default - GET
*/
sample_bundle_routing:
resource: "@YourBundle/Controller/"
type: annotation
prefix: /some_prefix/
yml路由配置如下所示:
/**
* Sample route
* @Route("/{id}", name="sample-route-name", defaults={"id" = 1})
* //defaults section is there to provide default values
*
* @Method({"GET", "POST"}) // not actually needed, default - GET
*/
sample_bundle_routing:
resource: "@YourBundle/Controller/"
type: annotation
prefix: /some_prefix/
UPD
此yml配置应放在mainrouting.yml
中。但你可以使用另一种变体。在mainrouting.yml
中输入以下内容:
sample_bundle_routing:
resource: "@YourBundle/Resources/config/routing.yml"
然后在放入mainrouting.yml
中的routing.yml
资源中,您可以编写:
sample_bundle_routing:
resource: "@YourBundle/Controller/"
type: annotation
prefix: /some_prefix/
我有一个问题:为什么需要同时使用yml和注释路由配置?我的意思是,您在下面的评论中写道:“但我还需要编辑我目录中的routing.yml文件,以提供控制器名称和操作方法名称。”。如果您使用注释路由类型-您可以这样做,就不需要在yml中为注释路由进行配置。我的意思是:您可以将路由作为每个操作的注释,或者作为bundle/mainrouting.yml
中的字符串,而不是同时作为两者!如果您使用注释路由,唯一需要放在yml中的是在哪里查找路由配置(在我的示例中是“@YourBundle/Controller/”
path)。您编写的这个yml路由配置应该放在app/config/routing.yml中,而不是放在我的bundle目录中,对吗?但我还需要编辑我的目录中的routing.yml文件,以提供控制器名称和操作方法名称。@EwanDelanoy,在评论中添加了更新作为您问题的答案。看吧,谢谢你的更新。我想我现在明白了:如果使用annotation,Symfony将扫描所有控制器类和操作,并查找与给定给浏览器的路由对应的唯一控制器。我最好说sf不会扫描所有(!)控制器类,它只扫描routing.yml-inresource
选项中为具有type:annotation
的路由部分提供的路径下的类。