调用Codeigniter 3中的未定义方法

时间:2019-11-19 11:53:09

标签: php codeigniter codeigniter-3

所以我只想简单地添加,更新和删除一些数据(名称,ID和地址)。添加和删​​除对我来说很好用,但更新不起作用,codeigniter给我一个错误消息:

遇到PHP错误 严重性:错误 消息:调用未定义的方法Mahasiswa_model :: getMahasiswa() 文件名:controllers / Mahasiswa.php 行号:35 回溯:

这些是我的代码,我认为它与错误有关。 这个文件名为Mahasiswa.php

<?php
    if (!defined('BASEPATH')) exit('no direcet  script access allowed');

    class Mahasiswa extends CI_Controller {

        function __construct() {
            parent::__construct();
            $this->load->database();
            $this->load->helper('url');
            $this->load->helper('form');
            $this->load->model('Mahasiswa_model');
        }

        public function index() {
            $data['mhs'] = $this->Mahasiswa_model->retrieve();
            $this->load->view('Mahasiswa_view', $data);
        }

        public function form_tambah() {
            $this->load->view('Tambah_view');
        }

        public function submit() {
            $this->Mahasiswa_model->add($this->input->post('var'));
            $data['submitted'] = TRUE;
            $this->load->view('Tambah_view', $data);
        }

        function delete() {
            $this->Mahasiswa_model->delete($this->uri->rsegment(3));
            $this->index();
        }

        function form_update() {
            $data['mhs'] = $this->Mahasiswa_model->getMahasiswa($this->uri->rsegment(3));
            $this->load->view('update_view', $data);
        }

        function update() {
            $this->Mahasiswa_model->update($this->input->post('old_nim'),
            $this->input->post('var'));
            $this->index();
        }
    }
?>

这是Mahasiswa_model.php

<?php
    class Mahasiswa_model extends CI_Model {
        function retrieve() {
            $query = $this->db->get('mhs');

            if($query->result()) {
                foreach ($query->result() as $content) {
                    $data[] = array(
                        $content->nim,
                        $content->nama,
                        $content->alamat
                    );
                }
                return $data;
            } else {
                return FALSE;
            }
        }

        function add($arg) {
            $data = array (
                'nim' => $arg[0],
                'nama'=> $arg[1],
                'alamat' => $arg[2],
            );

            $this->db->insert('mhs', $data);
        }

        function delete($id) {
            $this->db->where('nim', $id);
            $this->db->delete('mhs');
        }

        function update($id, $form) {
            $data = array(
                'nim' => $form[0],
                'nama' =>$form[1],
                'alamat' => $form[2],
            );
        }
    }
?>

也许有人可以帮助我发现我在哪里犯了错误?第35行对我来说不够清晰

1 个答案:

答案 0 :(得分:1)

控制器中的这一行是问题所在:

$this->Mahasiswa_model->getMahasiswa($this->uri->rsegment(3));

您正在调用应该在模型中可用的getMahasiswa方法,但是(假设您为模型发布的代码是完整的)不是。您的模型仅声明了retrieveadddeleteupdate方法。

您要么需要在模型中创建getMahasiswa方法,要么需要从控制器中调用其他方法。

如果要从同一控制器调用函数,则只需编写即可。

$data = $this->getMahasiswa($parameter1); IMP:功能必须存在于同一控制器中。