0

私は Zend フレームワークが初めてで、現在 Zend_Acl を見ています。オンラインには複数の例があります。これらの例の多くでは、次のようなコードが表示されます。

class My_Acl extends Zend_Acl {
  public function __construct() {
    //Add a new role called "guest"
    $this->addRole(new Zend_Acl_Role('guest'));

    //Add a role called user, which inherits from guest
    $this->addRole(new Zend_Acl_Role('user'), 'guest');

    //Add a resource called page
    $this->add(new Zend_Acl_Resource('page'));

    //Add a resource called news, which inherits page
    $this->add(new Zend_Acl_Resource('news'), 'page');

    //Finally, we want to allow guests to view pages
    $this->allow('guest', 'page', 'view');

    //and users can comment news
    $this->allow('user', 'news', 'comment');
  }
}

基本的には、ロールとリソースを定義する Zend_Acl クラスを拡張します。たとえば、ブートストラップのリソースメソッドで同じことを行い、結果をレジストリに押し込むのとは対照的に、別のクラスを作成する理由を理解できていませんか?

たとえば、次のようにします。

protected function _initAcl()
{
    $myacl = new Zend_Acl();
    $myacl->addRole(new Zend_Acl_Role('guest'));
    $myacl->addRole(new Zend_Acl_Role('user'), 'guest');
    $myacl->add(new Zend_Acl_Resource('page'));
    $myacl->add(new Zend_Acl_Resource('news'), 'page');
    $myacl->allow('guest', 'page', 'view');
    $myacl->allow('user', 'news', 'comment');

    Zend_Registry::set('acl', $myacl);
}

これらの方法で同じ結果が得られると考えるのは正しいですか?

ありがとう!PSいまいましいzendは複雑です

4

2 に答える 2

4

一般的に言えば、ACL だけでなく、この種のものを独自のクラスに配置すると、次のようないくつかの利点が得られます。

  1. テスト容易性: これで、単体テストを適用できる単一のコンポーネントができました。
  2. 拡張性: 必要に応じて拡張および変更できます
  3. 移植性: ドロップするだけで、別のプロジェクトで使用できます。

この特定のケースでは、これらはそれほど明白ではないように見えるかもしれません。より複雑なケースでは、これらの利点がより明確になります。しかし、ほとんどのものと同様に、YMMV.

ところで、私はまた、ZFが登ることを学んでいることに気づきました-そして時々まだ見つけています-。しかし、私はフレームワークだけでなく、依存性注入、単体テスト、DRY、SRP、デザイン パターンなどの多くのベスト プラクティスも学んでいたことを認識しています。それだけの価値があります。幸運を!

于 2011-03-07T17:23:51.440 に答える
1

私はそれが同じことをすると思います-最初は「外側」からちょうどきれいです:)

編集:いいえ、それはきれいではありません-それはただ分離されています...私はあなたがそれをどのように行うかを選ぶことができると思います...私は個人的にブートストラップソリューションに投票します:)

于 2011-03-07T16:46:31.990 に答える