gpt4 book ai didi

php - PhalconPHP - 无法从 Controller 中的 DI 加载组件

转载 作者:行者123 更新时间:2023-12-04 16:54:40 26 4
gpt4 key购买 nike

我正在尝试为多模块 PhalconPHP 应用程序创建一个 ACL 组件作为服务。当我从 Controller Base 调用 ACL 组件时,我收到一个错误,提示我无法重新声明 ACL 类。

任何想法如何修复它,并理解为什么它再次重新初始化的逻辑?

fatal error :无法声明类 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\AclPhalcon\Acl ?
例如,对于以下代码,您会遇到相同的错误
namespace My\Awesome\Ns;

use Some\Name; # Name 1

class Name # Name 2
{

}

关于php - PhalconPHP - 无法从 Controller 中的 DI 加载组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34923530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com