Вопрос по списку ACL Zend framework

Я новичок в Zend framework и сейчас смотрю на 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);
}

Прав ли я, думая, что эти способы дадут нам такой же результат?

Благодарность! p.s. проклятый зенд сложный


person Stann    schedule 07.03.2011    source источник


Ответы (2)


Вообще говоря, помещение такого рода вещей - не только ACL - в отдельный класс дает несколько преимуществ, в том числе:

  1. Возможность тестирования: теперь у вас есть единственный компонент, к которому вы можете применить модульное тестирование.
  2. Расширяемость: при необходимости вы можете расширять и изменять.
  3. Переносимость: используйте его в другом проекте, просто вставив его.

В данном конкретном случае это может показаться не таким очевидным. В более сложном случае эти преимущества становятся более очевидными. Но, как и в большинстве случаев, YMMV.

Кстати, я также обнаружил - и иногда все еще нахожу - учить ZF лазать. Но я понимаю, что изучал не только фреймворк, но и множество передовых практик, таких как внедрение зависимостей, модульное тестирование, DRY, SRP, шаблоны проектирования и т. Д. Я советую вам продолжать это; это того стоит. Удачи!

person David Weinraub    schedule 07.03.2011
comment
Я согласен с @David, потому что с расширением класса вы можете создать определенный метод для работы с вашим ACL: получить роли или привилегии, добавить конкретный тест hasAccess и т. Д. - person Akarun; 07.03.2011
comment
@Akarun: Я даже не думал об этом. Спасибо! - person David Weinraub; 07.03.2011
comment
Возможность тестирования не приходила мне в голову, так как я еще не пробовал себя в модульном тестировании. - person Stann; 07.03.2011
comment
Я перешел с Codeigniter, потому что продолжал бить по стенам и чувствую то же, что и Дэвид, по поводу Zend Framework. Да, это сложно, но только потому, что открывает множество концепций, которые абстрагируются от других фреймворков. Например, нигде в руководстве Ci не обсуждается отправка, запрос и ответ. Я работаю над своей реализацией mini cms с zf. посмотрим как пойдет :) - person Stann; 08.03.2011

Я думаю, что делает то же самое - первое просто чище "извне" :)

РЕДАКТИРОВАТЬ: нет, он не чище - он просто отделен ... Я думаю, вы можете выбрать, как вы это сделаете ... Я лично голосую за решение начальной загрузки :)

person grongor    schedule 07.03.2011
comment
Что ж. это вроде как то, что я пытаюсь понять - создание отдельного класса, как это, было бы лучшей практикой? - person Stann; 07.03.2011
comment
Извини, чувак, я тоже неопытен ... только начинаю с ZF. Я считаю, что расширение класса - это хорошо, только если вы хотите добавить какой-то функционал. Вот как я это понимаю и использую. - person grongor; 07.03.2011