Примечание: попытка получить свойство необъектного Zend AccessCheck

Я учусь Zend от Александр Романенко видео, у меня проблема с zend_aclЯ объявил соединение с базой данных в application.ini:

resources.db.params.dbname     = zftutorial
resources.db.params.username   = root
resources.db.params.password   =
resources.db.params.hostname   = localhost

я добавил LibraryAcl.php в моих моделях:

<?php
class Model_LibraryAcl extends Zend_Acl
{
public function __construct()
{
$this -> add(new Zend_Acl_Resource('book'));
$this ->add(new Zend_Acl_Resource('add'),'book');
$this ->add(new Zend_Acl_Resource('edit'),'book');

$this->add(new Zend_Acl_Resource('books'));
$this->add(new Zend_Acl_Resource('list'),'books');

$this->addRole(new Zend_Acl_Role('user'));
$this->addRole(new Zend_Acl_Role('admin'),'user');

$this ->allow('user','books','list');
$this->allow('admin','book','edit');
$this->allow('admin','book','add');
}
}

и изменил Bootstrap.php :

protected function _initAutoload()
{
$moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '',
'basePath' => APPLICATION_PATH));
$acl = new Model_LibraryAcl;
$auth = Zend_Auth::getInstance();

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

return $moduleLoader;
}

Я также добавил AccessCheck.php в плагинах:

<?php
class Plugin_AccessCheck extends Zend_Controller_Plugin_Abstract
{
private $_acl = null;
private $_auth = null;
public function __construct(Zend_Acl $acl, Zend_Auth $auth){
$this ->_acl = $acl;
$this->_auth = $auth;

}
public function preDispatch(Zend_Controller_Request_Abstract $request)
{
$resource = $request->getControllerName();
$action = $request->getActionName();

$identify = $this->_auth->getStorage()->read();
$role = $identify->role;
if (!$this->_acl->isAllowed($role , $resource, $action)){
$request->setControllerName('authentication')
->setActionName('login');
}
}
}

и, наконец, это мой базы данных zftutorial в localhost:

 Database: `zftutorial`<br>
Table structure for table `books`<br>
CREATE TABLE IF NOT EXISTS `books` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`author` varchar(500) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
INSERT INTO `books` (`id`, `title`, `author`) VALUES
(1, 'onvane ketab', 'author ketab avali'),
(2, 'onvane ketab dovomi', 'author ketab dovomi'),
(3, 'onvan3', 'author varc3'),
(4, 'onvan4', 'author varc4');<Br>
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`role` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;<br>
INSERT INTO `users` (`id`, `username`, `password`, `role`) VALUES
(1, 'john', 'pass1', 'user'),
(2, 'george', 'pass2', 'admin');

Эта ошибка произошла:

Notice: Trying to get property of non-object in C:\wamp\www\Zend\workspaces\test\application\plugins\AccessCheck.php on line 17

0

Решение

Я думаю, что это потому, что еще не было аутентификации.
Попробуй это:

if ($this->_auth->hasIdentity()) {
$identify = $this->_auth->getStorage()->read();
$role = $identify->role;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]