gpt4 book ai didi

php - 我可以在 PhalconPHP 中使用多重命名空间吗

转载 作者:行者123 更新时间:2023-12-04 17:03:55 24 4
gpt4 key购买 nike

我正在使用很棒的 PhalconPHP Framework .我有不同的用户级别并加载正确的 Controller ,我在调度程序类中使用命名空间。

$di->set('dispatcher', function() {

//Create an EventsManager
$eventsManager = new EventsManager();

//Remove extension before dispatch
$eventsManager->attach("dispatch:beforeDispatchLoop", function($event, $dispatcher) {
switch($user->getUserType()) {
case 1:
//Student
$dispatcher->setNamespaceName('student');
break;
case 2:
//Userlevel 2, yet to come
break;
case 3:
//Admin &| Minion
$dispatcher->setNamespaceName('admin');
}
});

$dispatcher = new MvcDispatcher();
$dispatcher->setEventsManager($eventsManager);

return $dispatcher;
});

命名空间是这样注册的:
$loader->registerNamespaces(
array(
'Student' => __DIR__ . '/../../app/controllers/student',
'Admin' => __DIR__ . '/../../app/controllers/admin,
)

);

这很好用,但现在我还想要子目录,比如“..controllers/admin/sub”。 “/sub”中的 Controller 也必须在命名空间“admin”中。 (因为调度员)或者我可以以某种方式做一些类似命名空间 Admin/* 和 php 包括所有子目录的事情吗?

我希望我能解释我的问题,有人可以提供帮助。 =)

最佳答案

恕我直言,更好的方法是在路由器逻辑域中 - 您的调度员调度它被告知要调度的东西,您的路由器找出要调度的内容并告诉调度员。你在两者之间混合。我会扩展路由器,覆盖句柄方法并从那里设置命名空间。路由器需要向 DI 注册(否则将使用基本的)。

public function handle($uri = null)
{
parent::handle($uri);

switch($user->getUserType()) {
case 1:
//Student
$this->_namespace = 'student';
break;
case 2:
//Userlevel 2, yet to come
break;
case 3:
//Admin &| Minion
$this->_namespace = 'admin';
break;
}
}

对于实际问题 - 它也与您的路由应该工作的方式有关。您需要指定子 namespaces in your routes或者您也可以在 handle 函数中执行此操作,如下所示。我测试过并且它有效,但是在路由中指定它是将相关逻辑保持在一个地方的更好方法。
public function handle($uri = null)
{
$this->_controller = 'sub\\' . $this->_controller;
}

编辑:此外,可能不是您想听到的,但是为您的 Controller 设置子文件夹可能不是前进的最佳方式。我不知道是否有最佳实践,但将它们平放在每个模块/应用程序的一个目录中似乎是事实上的。你可以有多个带有自己 Controller 的模块,Phalcon 支持多模块好吧。

关于php - 我可以在 PhalconPHP 中使用多重命名空间吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21853667/

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