私は最近、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 の場所ならどこでも、コメント内でも変換されます。_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 でこの種の問題に遭遇するとは思っていませんでした。