我需要在视图-Codeigniter中调用控制器函数

时间:2015-11-10 13:54:50

标签: php codeigniter

我需要从视图中调用一个函数来回显一个值。我使用以下代码,

Controller(test_controller)

public function displayCategory()
    {
        $this->load->model('Model_test');

        $data['categories'] = $this->Model_test->getCategories();

        $this->load->view('test_view', $data);
    }

public function display($id)
    {
        $this->load->model('Model_test');
        $name= $this->Model_test->getName($id);
        return $name;
    }

模型(Model_test)

function getCategories() {
        $query = $this->db->query("SELECT * FROM category");
        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

function getName($userId) {
        $query = $this->db->query("SELECT name FROM user where id = '$userId' ");
        if ($query->num_rows() > 0) {
            return $query->row()->name;
        } else {
            return NULL;
        }
    }

查看

<div id="body">

        <?php                
            foreach ($categories as $object) {
                $temp = $this->test_controller->display($object->id);
                echo $object->title . "&nbsp;&nbsp;". $object->no . $temp . '<br/>';
            }
        ?>

</div>

但运行代码时出现一些错误。

错误消息:未定义属性:视图中的CI_Loader :: $ test_controller

1 个答案:

答案 0 :(得分:0)

我不确定您是否使用CodeIgniter 2或3.

无论如何,基本上你不想在View文件中使用任何东西,除了辅助函数或某种“presenter”层(我应该在控制器中调用)。

使用Join

的解决方案

请阅读本手册page并搜索加入。在那里,您可以了解SQL join directive的实施情况。

您想修改此(getCategories())函数,以便返回您需要的数据

function getCategories() {

   $this->db->select('category.title, category.no, user.name as username')
            ->from('category')
            ->join('user', 'user.id = category.id');
   $query = $this->db->get();

   if ($query->num_rows() > 0) {
       return $query->result();
   } else {
       return NULL;
   }
}

在视图中,您可以像这样

获取用户名
foreach ($categories as $object) {
    echo $object->title . "&nbsp;&nbsp;". $object->no . $object->username . '<br/>';
}
  

我不是100%肯定所以请发表评论我稍后会编辑这个答案。

解决方案“破坏规则”

https://stackoverflow.com/a/24320884/1564365

一般说明

还可以考虑使用复数命名表格,以便类别用户 ......

使用“category.id as user.id”(将用户ID存储在“id”字段中的类别表中)也是一种不好的做法,而是使用数据透视表或1:1关系字段的情况下使用“USER_ID”。