我是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类,我们定义了角色和资源。我有点无法理解为什么我们会创建单独的类而不是在bootstrap中的示例资源方法中执行相同的操作然后将结果推送到注册表中?
对于ex来说就像这样:
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);
}
我是否正确地认为这些方法会给我们带来相同的结果?
谢谢! 附:该死的很复杂
答案 0 :(得分:4)
一般来说,将这种东西 - 不仅仅是ACL - 放在自己的类中会带来一些好处,包括:
在这种特殊情况下,这些似乎并不那么明显。在更复杂的情况下,这些好处变得更加明显。但与大多数事情一样,YMMV。
顺便说一下,我也发现 - 有时还能找到 - 学习ZF是一种攀登。但我意识到我不仅学习了框架,还学习了许多最佳实践,如依赖注入,单元测试,DRY,SRP,设计模式等。我建议你坚持下去;这非常值得。祝你好运!答案 1 :(得分:1)
我认为它做同样的事情 - 第一个是从“外部”更清洁:)
编辑:不,它不是更清洁 - 它只是分开......我认为你可以选择你将如何做...我个人投票支持引导解决方案:)