问题的简短版本:Symfony的错误消息解释说我不能将type
键与 defaults
,我只能与resources
一起使用(请参阅下面的详细信息)。为什么会这样?我该如何解决?
详细版本:
以下是我在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 MiddleManBookBundleController;
class LuckyController
{
/**
* @Route("/lucky/number")
*/
public function numberAction()
{
$number = rand(0, 100);
return new Response(
'<html><body>Lucky number: '.$number.'</body></html>'
);
}
}
在我的浏览器中键入localhost:8000/example/lucky/number
。
错误消息如下:
The "type" key for the route definition "middle_man_book_example" in
"/Users/ewandelanoy/Documents/Math_Software/Symfony_stuff/sym-book/src/MiddleMan/BookBundle/Resources/config/routing.yml"
is unsupported. It is only available for imports in combination with
the "resource" key in
/Users/ewandelanoy/Documents/Math_Software/Symfony_stuff/sym-book/src/MiddleMan/BookBundle/Resources/config/routing.yml (
which is being imported from "/Users/ewandelanoy/Documents/Math_Software/Symfony_stuff/sym-book/app/config/routing.yml")
如果您使用的是type: annotation
则不需要,实际上,也不得将defaults
部分存储在 routeting.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
*/
yml 路由配置如下所示:
sample_bundle_routing:
resource: "@YourBundle/Controller/"
type: annotation
prefix: /some_prefix/
UPD这个 yml 配置应该放在主routing.yml
中。但是您可以使用另一种变体。主要routing.yml
这样说:
sample_bundle_routing:
resource: "@YourBundle/Resources/config/routing.yml"
然后在你放入主routing.yml
作为资源的routing.yml
中,你可以编写:
sample_bundle_routing:
resource: "@YourBundle/Controller/"
type: annotation
prefix: /some_prefix/
我有一个问题:为什么需要同时使用 yml 和注释路由配置?我的意思是您在下面的评论中写道:"但我还需要编辑目录中的 routeting.yml 文件,以提供控制器名称和操作方法名称。如果您使用注释路由类型 - 您可以这样做,而无需在 yml 中对注释路由进行配置。我的意思是:您要么作为每个操作的注释进行路由,要么作为捆绑/主routing.yml
中的字符串进行路由,而不是同时进行路由!如果您使用注释路由,则唯一需要放入 yml 的内容是在哪里查找路由配置(在我的示例中它是"@YourBundle/Controller/"
路径)。