8

我正在使用 CI2.0 和 PHP 5.3

我刚开始使用“Datamapper ORM”,非常棒!!然而他们是关于类名的一个大问题

我有一个名为“users”的数据库表,所以我的 dm 模型是“user”,而且我有一个同名“user”的控制器?

所以在“用户”控制器中使用“用户”模型是不可能的!

解决这个问题的最佳方法是什么?

非常感谢

此致

4

6 回答 6

16

CodeIgniter 的缺点之一是您不能将控制器、模型或库命名为相同的东西。这主要是一个 PHP 问题,因为显然你不能命名任何相同的东西,但可以通过两种方式避免它。

  1. PHP 命名空间 - 没办法,它们只是 PHP 5.3,如果它们被实现,90% 的社区都会启动。
  2. 控制器前缀 - 这是我很想添加的东西,但是……它会破坏每个人的东西。我们至少要等到 2.1 才会有这么大的变化。

现在我只能推荐你仔细命名你的模型和库。

控制器 - 用户
库 - 用户
模型 - User_model | 用户_m

这很烦人,但现在只是其中之一。

于 2011-03-03T11:17:23.617 回答
3

所以在“用户”控制器中使用“用户”模型是不可能的!

嗯,不,不是,您需要更仔细地检查用户指南;)

您可以为模型命名,而不是最初定义的名称:

如果您希望将模型分配给不同的对象名称,可以通过加载函数的第二个参数指定它:

$this->load->model('Model_name', 'fubar');    
$this->fubar->function();
于 2011-03-03T04:39:49.787 回答
0

我处理它的方式是用 . 结束我所有的控制器名称_controller

我也使用 datamapper,所以我有很多名字冲突。对于用户,我有一个用户(模型)和一个User_Controller.

然后我简单地添加:

$route['user'] = 'user_controller';

到 config/routes.php 文件,瞧。

唯一的缺点是,如果你有一个有很多页面的大型项目(比如我),你最终会得到一个巨大的 routes.php 文件,特别是如果你有很多有很多参数的函数,路由可能会变成真是让人头疼。

于 2013-08-12T02:29:16.383 回答
0

我在“项目”的情况下命名为:

控制器:
项目扩展 MY_Controller 扩展 CI_Controller

模型:
ProjectModel 扩展模型

在 View
project/projectManager // 作为主要内容
project/_projectItem // 使用 _ 下划线作为 subView

这工作得很好。

于 2013-03-27T20:37:31.510 回答
0

我会建议 :

  • 控制器 - 用户或/和用户
  • 库 - Users_lib 或 Users_library 或 User_lib 或 User_library
  • 模型 - Users_model 或 Users_m 或 User_model 或 User_m

为控制器保留“用户”和“用户”这两个词,这样您就可以保留好的 url。

只需与模型和控制器的复数或单数使用保持一致。

于 2012-09-05T03:18:59.937 回答
0

您需要做的就是将控制器文件名和类名更改为“用户”。您无需更改型号名称。

控制器:用户
模型:用户
数据库表:用户

查看Datamapper 文档

于 2011-03-31T04:05:52.567 回答