Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么不允许我合并;“类型”;加上;“违约”;在routing.yml中_Php_Symfony - Fatal编程技术网

Php 为什么不允许我合并;“类型”;加上;“违约”;在routing.yml中

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的错误消息 说明我不能将
类型
键与
默认值
,我只能与
资源一起使用(请参见下面的详细信息)。
为什么会这样?我怎样才能修好它

详细版本:

以下是我在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配置应放在main
routing.yml
中。但你可以使用另一种变体。在main
routing.yml
中输入以下内容:

sample_bundle_routing:
    resource: "@YourBundle/Resources/config/routing.yml"
然后在放入main
routing.yml
中的
routing.yml
资源中,您可以编写:

sample_bundle_routing:
    resource: "@YourBundle/Controller/"
    type:     annotation
    prefix:   /some_prefix/

我有一个问题:为什么需要同时使用yml和注释路由配置?我的意思是,您在下面的评论中写道:“但我还需要编辑我目录中的routing.yml文件,以提供控制器名称和操作方法名称。”。如果您使用注释路由类型-您可以这样做,就不需要在yml中为注释路由进行配置。我的意思是:您可以将路由作为每个操作的注释,或者作为bundle/main
routing.yml
中的字符串,而不是同时作为两者!如果您使用注释路由,唯一需要放在yml中的是在哪里查找路由配置(在我的示例中是
“@YourBundle/Controller/”
path)。

您编写的这个yml路由配置应该放在app/config/routing.yml中,而不是放在我的bundle目录中,对吗?但我还需要编辑我的目录中的routing.yml文件,以提供控制器名称和操作方法名称。@EwanDelanoy,在评论中添加了更新作为您问题的答案。看吧,谢谢你的更新。我想我现在明白了:如果使用annotation,Symfony将扫描所有控制器类和操作,并查找与给定给浏览器的路由对应的唯一控制器。我最好说sf不会扫描所有(!)控制器类,它只扫描routing.yml-in
resource
选项中为具有
type:annotation
的路由部分提供的路径下的类。