1

私は最近、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 でこの種の問題に遭遇するとは思っていませんでした。

4

1 に答える 1

3

yaml ファイルでは、文字列の区切り記号に二重引用符を使用しないでください。二重引用符を使用すると、\ 文字がエスケープされた値に変換されるように見えます。

クラス名に引用符を使用する必要はまったくありません。

@service のようなものを引用して、いくつかの破損した yaml プロセッサが発行するという警告を回避したい場合は、一重引用符を使用します。

于 2013-08-21T15:37:22.593 に答える