我想創建一個ACL組件作爲服務,用於多模塊PhalconPHP應用程序。當我從Controller Base調用ACL組件時,出現一個錯誤,我無法重新聲明ACL類。PhalconPHP - 無法從控制器的DI中加載組件
任何想法如何解決它,並理解爲什麼它重新初始化的邏輯?
致命錯誤:無法聲明類X \的Acl \的Acl因爲這個名字已經在C使用:\ XAMPP \ htdocs中\ X \程序\ COMMON \的Acl \ Acl.php上線12
更新: 如果我將所有內容更改爲「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();
};
}
}
嘗試同樣的錯誤.. –
我想我覆蓋ACL命名空間我自己莫名其妙..或有錯誤的費爾康2.1Beta2 .. – Yossi