【问题标题】:FuelPHP simple class Not Found ErrorFuelPHP简单类未找到错误
【发布时间】:2014-01-13 18:38:15
【问题描述】:

这是我第一次部署 FuelPHP,虽然我是 CodeIgniter 的长期用户。

我在加载页面时收到以下错误:

ErrorException [ Fatal Error ]:
Class 'Model\Model_UPS' not found

/classes/controller/ups.php

<?php
use \Model\Model_UPS;
class Controller_UPS extends Controller {
    public function action_index() {
        $view = View::forge('json');
        $view->title = Model_UPS::get_load();
        return $view;
    }
}
?>

/classes/model/model_ups.php 或 ups.php

<?php
namespace Model;
class Model_UPS extends \Model {
    public static function get_load() {
        return "This is the load!";
    }
}
?>

/views/json.php

<?=$title;?>

错误页面突出显示 ups.php 的 $view-&gt;title = Model_UPS::get_load(); 行。我已经尝试了几乎所有我能想到的使用、命名空间、模型文件名和模型类名的配置。我似乎找不到一个超级简单的 MVC 示例来用作指南。我试图尽可能地复制FuelPHP Docs,但失败了。有人能发现这有什么问题吗?

【问题讨论】:

  • 我不知道 codeigniter,但使用命名空间和伪下划线命名空间类名对我来说似乎很奇怪:\Model\Model_UPS;可能应该是:\Model\UPS...
  • CodeIgniter 需要这些前缀,因为它没有命名空间,而且它也不支持文件夹级联(所有类都在同一个文件夹中),这是长且带下划线的类名的另一个原因。 FuelPHP 中不需要。

标签: php codeigniter fuelphp


【解决方案1】:
  • 重命名文件:model/model_ups.phpmodel/ups.php
  • 重命名类:Model_UPSUPS
  • 更改:使用\Model\Model_UPS;改为使用\Model\UPS;
  • 更改:Model_UPS::get_load(); 改为 UPS::get_load();

【讨论】:

  • 这成功了!你能描述一下为什么需要如此具体地命名不同的区域吗?也许我在问他们如何适当地互动。 FuelPHP 文档中有一条关于如何使用 Model_ 作为模型前缀的说明。如果我想这样做,是否只需将其设为 model_ups.php、Model_UPS、使用 \Model\Model_UPS 和 Model_UPS::get_load()?我可以发誓我试过了,也许我没有。
  • FuelPHP 使用一个级联文件系统,类似于 Kohana(在某种程度上也是 CodeIgniter)。该系统兼容pre-namespace时代,并使用下划线创建文件夹层次结构,因此A_B_C在文件系统中将变为a/b/c.php。现在,我根本不会使用下划线,只使用命名空间,就像 vmartins 建议的那样。
猜你喜欢
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-05
  • 2020-03-24
相关资源
最近更新 更多