0

認証プラグインが機能しています。http://www.youtube.com/watch?v=b6qsSnLfcmE&feature=relmfuの優れたビデオシリーズに従って、ACLを追加しようとしています。

私の問題は、インスタンスをプラグインに渡すことができるようにモデルをBootstrapに登録しようとすると、サーバー500エラーが発生することです。私のブートストラップは次のようになります...

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initAutoload()
{
    $modelLoader = new Zend_Application_Module_AutoLoader(array(
        'namespace' => '',
        'basePath'  => APPLICATION_PATH));

    $acl = new Model_SystemAcl;
    $auth = Zend_Auth::getInstance();

    $fc = Zend_Controller_Front::getInstance();
    $fc->registerPlugin(new Plugin_AccessCheck($acl,$auth));

    return $modelLoader;
}

}

それは次の行です。

$acl = new Model_SystemAcl;

それが問題の原因です。コメントアウト(および渡された$ aclパラメーター)すると、正常に機能します。どういうわけか私のシステムがモデルをロードするように適切に構成されていないように見えます。これは、チュートリアルbtwに示されているブートストラップ全体です。おそらく、Application.iniに何か必要なものがありますか?

編集:はい、SystemAcl.phpは存在し、[applicationdir]/modelsにあります

4

4 に答える 4

1

まだロードされていない可能性のあるリソースをインスタンス化してみてください。これはお勧めできません。

代わりにコントローラ プラグインを使用する必要があります。

于 2012-09-10T15:33:50.427 に答える
1

設定に基づいて、クラスのファイル名はSystemAcl.phpではなくになりModel_SystemAcl.phpます。

于 2012-09-10T16:46:39.887 に答える
1

これは、アプリケーション名前空間「Application」からのロード モデルの完全な例です。

$resourceLoader = new Zend_Loader_Autoloader_Resource(
    array(
         'basePath'  => APPLICATION_PATH,
         'namespace' => 'Application',
    )
);
$resourceLoader->addResourceType('model', 'models/', 'Model');

$autoloader = Zend_Loader_Autoloader::getInstance();
$autoloader->pushAutoloader($resourceLoader);
于 2012-09-10T16:20:41.973 に答える
0

それがアプリケーション/モデルにある場合、スクリプトはModel_SystemAcl(「s」なし)ではなくModels_SystemAclである必要があると考えていました。そうは言っても、この種のものをブートストラップに貼り付けるよりも、長期的にはプラグインを使用する方が良い. それらのチュートリアルは良いですが:)

于 2012-09-10T16:15:10.857 に答える