PhalconPHP - 无法从控制器中的 DI 加载组件


PhalconPHP - Unable to load a component from the DI in a controller

我正在尝试为多模块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
{
}