Я пытаюсь создать компонент ACL как услугу для многомодульного приложения PhalconPHP. Когда я вызываю компонент ACL с базы контроллеров, я получаю сообщение об ошибке, что я не могу повторно объявить класс ACL.PhalconPHP - Не удается загрузить компонент из DI в контроллере
Любые идеи, как исправить это, и понять логику того, почему он снова инициализируется?
Фатальная ошибка: Невозможно объявить класс X \ Acl \ Acl, так как имя уже используется в C: \ XAMPP \ HTDOCS \ х \ приложение \ 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();
};
}
}
Try зарегистрировав услугу, как общий сервис .. –
Я думаю, что я перезапись имен ACL с моей как-то .. или есть ошибка в Phalcon 2.1Beta2 .. – Yossi