我正在尝试为多模块PhalconPHP应用程序创建一个ACL组件作为服务。当我从控制器库调用 ACL 组件时,我收到一个错误,指出我无法重新声明 ACL 类。
任何想法如何修复它,并理解为什么再次重新初始化它的逻辑?
致命错误:无法声明类 X''Acl''Acl,因为该名称已在第 12 行的 C:''xampp''htdocs''x''app''common''Acl''Acl.php 中使用
更新:如果我将所有内容更改为"Pacl",那么它可以工作。我假设可能与PhalconPHP命名空间混淆。我要么没有正确使用命名空间,要么 PhalconPHP 2.1 Beta 2 中存在错误。
/app/common/Acl/Acl.php
namespace X'Acl;
use Phalcon'Mvc'User'Component;
use Phalcon'Acl;
use Phalcon'Acl'Role as AclRole;
use Phalcon'Acl'Resource as AclResource;
/*
* ACL component
*/
class Acl extends Component {
private function initialize() {
}
public function isAllowed() {
die('called');
}
}
/app/front/controllers/ControllerBase.php
namespace X'Front'Controllers;
use Phalcon'Session as Session;
use Phalcon'Mvc'Controller;
use Phalcon'Mvc'Dispatcher;
class ControllerBase extends Controller {
public function beforeExecuteRoute(Dispatcher $dispatcher) {
//$this->acl = $this->getDI()->get("acl");
var_dump($this->acl->isAllowed()); //same behavior in both case
}
}
/app/front/Module.php
namespace X'Front;
use Phalcon'DiInterface;
use Phalcon'Mvc'Dispatcher;
use X'Acl'Acl as Acl;
class Module {
public function registerAutoloaders() {
$loader = new 'Phalcon'Loader();
$loader->registerNamespaces(array(
'X'Front'Controllers' => __DIR__ . '/controllers/',
'X'Front' => __DIR__,
'X' => __DIR__ . '/../common/'
));
$loader->register();
}
public function registerServices(DiInterface $di) {
$di['acl'] = function() {
return new Acl();
};
}
}
这不是
Phalcon的问题。仔细查看您的代码:
namespace X'Acl;
use Phalcon'Acl;
class Acl extends ... {
}
ACL解释器应该使用什么? X'Acl'Acl
还是Phalcon'Acl
?例如,对于以下代码,您得到的错误相同
namespace My'Awesome'Ns;
use Some'Name; # Name 1
class Name # Name 2
{
}