CodeIgniter - 放置函数/类的位置?

时间:2012-01-31 17:57:10

标签: codeigniter codeigniter-2

在理解CI中应保留哪些类时遇到问题。我正在构建一个描述/销售手机的应用程序。

我希望我的所有函数(即getphone,getdetails等)都驻留在一个名为Mobile的类中 - 我知道这个文件应该叫做Mobile.php并驻留在controllers文件夹中。

我可以在Mobile.php中拥有多个功能吗? E.g。

public function getphone() {
   xxx
   xx
   xx
}

public function getdetails() {
   xxx
   xx
   xx
}

或者我是否需要将每个函数放在自己的类中?

我非常感谢您查看一些有效的示例代码。我已经浏览了几个小时的文档和谷歌,并尝试了URL中的各种变体来找到测试类,但没有太多运气!我甚至搞乱了路线和.htaccess ......

我想要实现的目标如下:

http:/// model / HTC-Desire /被重新路由到一个接受HTC-Desire作为参数的函数(因为我需要它进行数据库查找)。默认控制器工作正常,但此后无法正常工作。

有什么想法吗?

由于

4 个答案:

答案 0 :(得分:12)

实际上它的工作原理如下:

控制器和模型会转到他们所知道的透视文件夹

如果要创建不是对象方法的函数,则必须创建辅助文件。更多信息: http://codeigniter.com/user_guide/general/helpers.html

现在,如果要创建自己的数据类型(不扩展模型和控制器的类),请将它们添加到库文件夹中。因此,如果我们想要创建一个类“Car”,则可以创建此文件:

class Car{

   function __construct(){}
}

并将其作为car.php

保存在libraries文件夹中

要创建Car类的实例,您必须执行以下操作:

$this->load->library('car');
$my_car = new Car();

此处有关图书馆的更多信息:
http://codeigniter.com/user_guide/general/creating_libraries.html

答案 1 :(得分:0)

是的,您可以在控制器类中拥有任意数量的函数。可以通过网址/class/function访问它们。

您可以在类函数中捕获参数,但这不可取。

class Mobile extends CI_Controller{

    public function getPhone($phoneModel=''){
        echo $phoneModel;
        //echo $this->input->post('phoneModel');
    }
}

http://site.com/mobile/getPhone/HTC-Rad 理论上会回应出“HTC-Rad”。 HOWEVER ,默认情况下,CI中的URL不受特殊字符的欢迎,因此在此示例中,您可能会遇到“不允许的URI字符”错误。您最好通过电话模型(或任何其他参数)通过$_POST到控制器。

答案 2 :(得分:0)

类可以作为ControllersModels存在,因为CodeIgniter实现了MVC pattern。我建议阅读更多相关信息,以了解您的课程/功能/等。最好的组织。

在我的脑海中,Pyro CMS是使用CodeIgniter构建的应用程序,源代码可以免费使用。我确定还有其他人。

答案 3 :(得分:0)

我认为最好从一个角度来处理它,即:创建一个包含所有功能的实用程序类。 将类文件放在哪里的问题的答案是“库”文件夹。 文档中对此进行了明确说明。 将您的课程放在库文件夹中

  

当我们使用“图书馆”一词时,通常是指   库目录中描述的类   本用户指南的类参考。

您可以阅读有关创建和使用库Creating Libraries — CodeIgniter 3.1.10 documentation

的更多信息。

将新创建的类放置在librarys文件夹中后,只需将库加载到控制器中即可使用,如下所示:

$this->load->library('yourphpclassname');

如果希望在构造函数中接收多个参数,则必须对其进行修改以接收将是一个数组的参数,然后加载/初始化会稍有不同,如下所示:

$params = array('type' => 'large', 'color' => 'red');

$this->load->library('yourphpclassname', $params);

然后,要访问该类中的任何函数,只需执行以下操作:

$this->yourphpclassname->some_method();

如果您还有其他问题,我希望这能回答您的问题,请留下评论,我会很好地回答他们。