【问题标题】:models not loading on phalcon multi module模型未加载到 phalcon 多模块上
【发布时间】:2016-08-13 05:50:57
【问题描述】:

我正在尝试使用命名空间实现 phalcon 多模块。通常它的工作。但模型未从其位置(/apps/models/)加载。如果我将所有模型文件粘贴到控制器目录中,那么它就可以工作了。它应该从模型目录加载。我该如何解决这个问题。

[前置模块]

$loader->registerNamespaces(
array(
'Multiple\Frontend\Controllers' => '../apps/frontend/controllers/',
'Multiple\Frontend\Models'      => '../apps/frontend/models/',
 ));

[博客模型]

namespace Multiple\Frontend\Controllers;
use Phalcon\Mvc\Model;
class Blogs extends Model{}    

我也尝试“命名空间 Multiple\Frontend\Models;”但不是成功。 得到类似的错误:

Fatal error: Uncaught Error: Class 'Multiple\Frontend\Controllers\News' not found in C:\xampp\htdocs\pm\apps\frontend\controllers\IndexController.php:38 Stack trace: #0 [internal function]:

我的调度员是这样的:

public function registerServices(DiInterface $di)
{
    # Registering a dispatcher
    $di->set('dispatcher', function () {
        $dispatcher = new Dispatcher();
        $dispatcher->setDefaultNamespace("Multiple\Frontend\Controllers");
        return $dispatcher;
});

我认为错误:“错误:找不到类'Multiple\Frontend\Controllers\Blogs'”,因为默认命名空间是前端\控制器。如何解决?请

【问题讨论】:

  • 为什么你的博客模型被命名为控制器?您的错误中的 News 是怎么回事,它在您的代码示例中却没有?
  • 我应该在博客模型中使用什么命名空间?是“命名空间 Multiple\Frontend\Models”吗?如果是,则显示致命错误消息模型位于模型目录中,这就是此错误的原因。如果我将新闻模型复制到控制器目录它工作完美
  • 我想从模型目录中调用新闻模型。
  • 您是否忘记将news 模型中的命名空间更改为Multiple\Frontend\Models
  • 你能否确认你的每一个模型都有命名空间Multiple\Frontend\Models。请您三重检查一下吗?

标签: php module phalcon


【解决方案1】:

您显然需要在模块之外加载模型。 registerNamespaces 只有在该模块被调度程序命中时才会在该模块中被命中。

实际上,我认为您在不同模块中使用模型时遇到问题。如果你有这个错误Multiple\Frontend\Controllers\News 找不到这意味着你只是没有正确的 use 语句并且它正在寻找相同命名空间中的类,只需添加use Multiple\Frontend\Models\News。你还在使用任何 IDE 吗?

【讨论】:

  • 你的意思是没有工作?只需在注册模块之前使用加载器并加载您的模型类,这里是示例 - pastebin.com/CgzT7mGc 然后只是 use Multiple\Frontend\Models\Blogs 或其他。它必须工作,我在我的应用程序中做同样的事情。 正如我已经写过的,仅当调度程序命中模块(如路由)时才会命中 registerNamespaces - 这就是示例工作没有任何问题的原因。如果你想在多个模块中使用你的模型 - 你需要在模块类之外使用加载器注册它们。
  • @Juri,他使用 Sublime Text,所以没有 IDE :)
  • 所以我更新了我的答案。这绝对是因为我认为他没有用。
  • 朱里!蒂莫西是对的,我使用崇高的文字。并在顶部查看我的代码,在应用程序 $di 之后为控制器和模型注册命名空间之后,我已经这样做了。我问为什么我每次都需要在我的控制器中添加模型?
  • 在控制器中添加模型是什么意思?这就是 php 的工作原理。如果 use class 在另一个命名空间中,则需要使用它。
【解决方案2】:

我认为您需要在控制器中添加一行额外的...

namespace Multiple\Frontend\Controllers;
use Phalcon\Mvc\Controller;

use Multiple\Frontend\Models\Blogs as Blogs; //** This line should Add **//

class IndexController extends Controller
{
public function indexAction()
{}
}

【讨论】:

  • Gr8 老板!它的工作原理......但我有一个问题,如果我使用多模块,那么我应该添加模型的每个控制器都是这样吗?
  • 我不知道,但我只是这样解决了我的问题。问一些比我多的专家,比如蒂莫西。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 2016-07-29
  • 1970-01-01
相关资源
最近更新 更多