OOP PHP Codeigniter控制器层次结构

时间:2011-05-10 22:16:13

标签: php codeigniter controller form-submit hierarchy

我的OOP概念存在问题。我会尽力解释一下。

我有这个班级

class Application_controller extends CI_Controller{
     public function addItem(){
        "some code to add the item to the database (working)";
     }
}

我有另一个班,两个控制员:

require_once 'application_controller.php';
class Contact extends Application_controller{
     public function __construct(){
         parent::__construct("variables needed");
     }
}

在联系人的视图添加中,我添加了以下操作 contact / addItem

好的,现在这就是我对OOP的了解。

addItem方法不应该是Contact类的一部分,因为它扩展了Application_controller吗?

我在问,因为当我提交表单时,我没有采取任何行动,当我在类中添加方法addItem时,覆盖其中的父作品。

3 个答案:

答案 0 :(得分:1)

你没有采取行动的原因是codeigniter在你的Contact类中找不到方法addItem(更新:这可能是由于CodeIgniter路由的工作方式)。解决方案是使addItem成为模型中的通用方法,该模型将数据存储在表中,将其移动到模型中,并在控制器中加载模型。

创建application / models / writeModel.php

class writeModel extends CI_Model{
  function addItem(){
    // code here
  }
}

在您的控制器中:

    class Contact extends Controller{
       function __controller(){
          parent::Controller();
          $this->load->model('writeModel');
       }

       function somefunction(){
          $this->writeModel->addItem(); // call the method here
       }
    }

参考:CodeIgniter Models

答案 1 :(得分:0)

此处的问题(除了OP中的几个语法错误之外)可能是“Contact”无法扩展“Application_controller”,因为它不知道它存在。如果我们设置这样的测试:

<强> /controllers/Test.php

class Test extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
    }

    function index()
    {
        echo 'test';
    }
}

<强> /controllers/TestTwo.php

require_once("Test.php");

class TestTwo extends Test    
{
    function __construct()
    {
        parent::__construct();
    }
    function index()
    {
        parent::index();
        echo ' and test two';
    }
}

我们将通过导航到appurl / TestTwo /获得所需的“测试和测试二”输出。这是因为TestTwo知道Test。删除require();来自TestTwo.php的一行将打破这种关系。

从TestTwo中删除index()函数将导致仅通过导航到appurl / TestTwo /输出“test”。

答案 2 :(得分:0)

我在Codeigniter论坛上找到了一些类似问题的答案。它说这个

  

您的ShopDownloads将从Shop控制器继承(方法,属性等)。并且如视频教程中所述,您必须从控制器类继承您的类,以便它可以继承codeigniter为您提供的所有属性和方法。

Sohaib,

帖子的链接是http://codeigniter.com/forums/viewthread/102718/#518120

我不知道如何,但这在今天有效。它可能是服务器。只需重新启动。

它解决了,只需启动服务器并开始开发LOL。谢谢你的时间。

此致

Elkas