我正在尝试为多模块PhalconPHP应用程序创建ACL组件作为服务。当我从Controller Base调用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();
};
}
}
答案 0 :(得分:2)
这不是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
{
}