以P开头的控制器文件名导致路由问题

时间:2013-08-21 13:52:49

标签: symfony controller routing yaml

我最近创建了一个名为PublishBannerController.php的控制器。它是以前控制器的剪切和粘贴,所有各个部分都相应调整。唯一的问题是,当我尝试加载它时出现此错误:

FatalErrorException: Error: Class 'Me\MyBundle\Controller?ublishBannerController' not found in /.../public_html/app/cache/dev/appDevDebugProjectContainer.php line 3190

我已经更换了出现的广场,用?因为广场真的与stackOverflows编辑器混淆。 似乎Symfony 2解析器将包含\ P的路径转换为表示的特殊字符。 正如您在appDevDebugProjectContainer.php中可以看到的那样,即使在注释中它也会转换它。它包含_P等的任何地方都很好。

/*
* Gets the 'me.controller.publishbanner' service.
*
* This service is shared.
* This method always returns the same instance of the service.
*
* @return Me\MyBundle\Controller?ublishBannerController A Me\MyBundle\Controller?ublishBannerController instance.
*/
protected function getMe_Controller_PublishbannerService()
{
$this->services['me.controller.publishbanner'] = $instance = new \Me\MyBundle\Controller?ublishBannerController();

$instance->setContainer($this);

return $instance;
}

这是我的routing.yml

me_site_publishbanner:
    pattern:  /publishbanner
    defaults: { _controller: me.controller.publishbanner:indexAction }

和services.yml

me.controller.publishbanner:
    class:  "Me\MyBundle\Controller\PublishBannerController"
    shared: true
    calls:
        - [ setContainer, ["@service_container"] ]

我在某处犯了错误,或者这是Symfony 2中的错误?你基本上不允许创建以P开头的控制器名称吗?

显然,这是一个Unicode问题,与此有关: http://php.net/manual/en/regexp.reference.unicode.php

我在php.ini中设置了这个:

default_charset = "UTF-8"

我只是没想到会在Symfony 2中遇到这类问题。

1 个答案:

答案 0 :(得分:3)

不要在yaml文件中使用双引号作为字符串分隔符。看起来,使用双引号,\字符将转换为其转义值。

根本不需要为类名使用任何引号。

如果您确实想引用@service之类的内容来避免警告某些破坏的yaml处理器问题,那么请使用单引号。