【问题标题】:I need to call a controller function inside a view -Codeigniter我需要在视图中调用控制器函数 -Codeigniter
【发布时间】:2015-11-10 13:54:49
【问题描述】:

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

控制器(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 in view

【问题讨论】:

  • 告诉我们你是如何得到$categories数组的。
  • @Kyslik 已编辑.. 我在函数 displayCategory() 中添加了代码
  • 好的,现在显示getCategories() 的内容,您想在该函数中使用连接或准备数据...所以您不必在视图中进行“数据操作”...
  • @Kyslik 添加到模型中

标签: php codeigniter


【解决方案1】:

我不确定你使用的是 CodeIgniter 2 还是 3。

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


使用 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% 确定,所以请发布 cmets,我稍后会编辑此答案。


解决“打破规则”

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


一般说明

还可以考虑使用复数命名您的表格,以便 categoriesusers...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多