使用codeigniter 2.0和Datamapper时的类名冲突?

时间:2011-03-03 04:34:23

标签: php database codeigniter codeigniter-2 codeigniter-datamapper

我正在使用CI2.0和PHP 5.3

我刚开始使用“Datamapper ORM”,它非常棒!!但是关于班级名称

,这是一个很大的问题

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

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

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

非常感谢

最好的问候

6 个答案:

答案 0 :(得分:16)

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

  1. PHP命名空间 - 没有办法,它们只是PHP 5.3,如果实施的话,90%的社区都会启动。
  2. 控制器前缀 - 这是我想要添加的内容,但是......它会破坏每个人的内容。我们必须等到2.1,至少要做一个大的改变。
  3. 现在我可以推荐的是你仔细命名模型和库。

    控制器 - 用户
    图书馆 - 用户
    模型 - User_model | User_m

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

答案 1 :(得分:3)

  

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

不,不是,您需要更仔细地检查UserGuide;)

您可以为您的模型命名,而不是将其定义为:

  

如果您希望分配您的模型   你可以使用不同的对象名称   通过第二个参数指定它   加载功能:

$this->load->model('Model_name', 'fubar');    
$this->fubar->function();

答案 2 :(得分:0)

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

控制器:用户
型号:用户
db table:users

查看Datamapper docs

答案 3 :(得分:0)

我建议:

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

为控制器保留用户和用户的字样,以便保持良好的网址。

与模型和控制器使用复数或单数一致。

答案 4 :(得分:0)

我在'Project'的情况下命名如下:

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

型号:
ProjectModel扩展了Model

在视图中 project / projectManager //作为主要内容
project / _projectItem //使用_ underscore作为subView

一切正常。

答案 5 :(得分:0)

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

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

然后我只需添加:

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

到config / routes.php文件并瞧。

唯一不足的是,如果你有一个包含大量页面的大型项目(比如我)你会得到一个巨大的routes.php文件,特别是如果你有很多具有大量参数的函数,路由可能会变得非常痛苦。