Zend Framework ACL вопрос - PullRequest
       20

Zend Framework ACL вопрос

0 голосов
/ 07 марта 2011

Я новичок в 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);
}

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

спасибо! постскриптум чертовски сложно - 1011 *

Ответы [ 2 ]

4 голосов
/ 07 марта 2011

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

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

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

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

1 голос
/ 07 марта 2011

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

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

...