3

バンドル内の新しいフォルダーに作成したカスタム クラスにアクセスできません。

MemberBundle というバンドルがあります - src/My/Bundle/MemberBundle にあります

src/My/Bundle/MemberBundle/Models にある Models というディレクトリを作成しました

そのディレクトリには、次のコードを含む MemberModel.php というファイルがあります。

<?php
namespace My\MemberBundle\Models;

class MemberModel {
    public function getActiveCampaignId($zone) {
    ### Custom Mysql Query
    ...
    }
}

次のようにコントローラーからそのクラスにアクセスしようとすると:

    $MemberModel = new My\MemberBundle\Models\MemberModel();
    $data = $MemberModel->getActiveCampaignId("1");
    print_r($data);

エラーが発生します:

Fatal error: Class 'My\MemberBundle\Models\MemberModel' not found in ...

誰かが私を正しい方向に向けてもらえますか?

4

2 に答える 2

1

必要に応じてフルパスを使用していなかったことがわかりました。両方のパスに「バンドル」を追加する必要がありました。

次の 2 つのコードを使用する必要がありました。

<?php
namespace My\Bundle\MemberBundle\Models;

class MemberModel {
    public function getActiveCampaignId($zone) {
    ### Custom Mysql Query
    ...
    }
}

と:

    $MemberModel = new My\Bundle\MemberBundle\Models\MemberModel();
    $data = $MemberModel->getRandomActiveCampaignId("1");
    print_r($data);
于 2013-02-07T16:48:32.997 に答える
1

クラス名にアンダースコアが含まれている古いクラスをアタッチしようとしましたが、クラスをロードできませんでした。どうやらアンダースコアは、クラス名に関しては特別な文字であり、ディレクトリ区切り記号またはそれらの行の何かとして扱われます。

詳細情報 @ http://www.sitepoint.com/autoloading-and-the-psr-0-standard/

クラス名の各アンダースコアは、DIRECTORY_SEPARATOR に変換されます。アンダースコアは、名前空間では特別な意味を持ちません。

ふぅ。これは、理解するのに時間がかかりすぎました。

于 2014-07-08T12:28:32.780 に答える