【问题标题】:Codeigniter :Call function inside ControllerCodeigniter :Controller 内部调用函数
【发布时间】:2020-01-13 21:55:11
【问题描述】:

我在 Codeigniter 的另一个函数中调用函数有问题。所以我有 2 个功能:

函数 1 有 Controller 用于从数据库中获取数据:

public function tampil_halaman_berita()
    {
        $data['tampil_berita'] = $this->berita->getAllBerita();
        $data['tampil_kategori'] = $this->berita->getAllKategori();
        $data['tampil_wartawan'] = $this->berita->getAllWartawan();
    }

函数 2 从函数 1 调用 Controller 到索引:

public function index()
    {
        $data['judul'] = "Halaman Berita";
        $this->tampil_halaman_berita();
        $this->load->view('ui/Header');
        $this->load->view('pages/Berita', $data);
        $this->load->view('ui/Footer');
    }

但我收到此错误,我的函数 tampil_halaman_berita 未调用到 index()

Severity: Notice

Message: Undefined variable: tampil_berita

Filename: pages/Berita.php

Line Number: 17

Backtrace:

File: C:\xampp\htdocs\flutter-news\application\views\pages\Berita.php
Line: 17
Function: _error_handler

File: C:\xampp\htdocs\flutter-news\application\controllers\pages\Berita.php
Line: 21
Function: view

File: C:\xampp\htdocs\flutter-news\index.php
Line: 315
Function: require_once

我不想,像这样对我的所有函数重复每个模型,所以我创建了一些函数,我只是调用函数名。

public function add(){
$data['tampil_berita'] = $this->berita->getAllBerita();
        $data['tampil_kategori'] = $this->berita->getAllKategori();
        $data['tampil_wartawan'] = $this->berita->getAllWartawan();
}
public function update(){
$data['tampil_berita'] = $this->berita->getAllBerita();
        $data['tampil_kategori'] = $this->berita->getAllKategori();
        $data['tampil_wartawan'] = $this->berita->getAllWartawan();
}

希望大家能理解我的问题。

谢谢

如果你需要我的完整控制器

<?php
class Berita extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library('session');
        $this->load->model('pages/Berita_model', 'berita');
    }
    public function tampil_halaman_berita()
    {
        $data['tampil_berita'] = $this->berita->getAllBerita();
        $data['tampil_kategori'] = $this->berita->getAllKategori();
        $data['tampil_wartawan'] = $this->berita->getAllWartawan();
    }
    public function index()
    {
        $data['judul'] = "Halaman Berita";
        // $data['tampil_kategori'] = $this->berita->getAllKategori();
        // $data['tampil_wartawan'] = $this->berita->getAllWartawan();
        // $data['tampil_berita_join'] = $this->berita->getBeritaJoin();
        $this->tampil_halaman_berita();
        $this->load->view('ui/Header');
        $this->load->view('pages/Berita', $data);
        $this->load->view('ui/Footer');
    }
    public function add()
    {
        $data['judul'] = " Halaman Berita";
        $data['tampil_berita'] = $this->berita->getAllBerita();
        $data['tampil_kategori'] = $this->berita->getAllKategori();
        $data['tampil_wartawan'] = $this->berita->getAllWartawan();
        $this->form_validation->set_rules('judul_berita', 'Judul Berita', 'required');
        $this->form_validation->set_rules('isi_berita', 'Isi Berita', 'required');
        if (empty($_FILES['gambar_berita']['name'])) {
            $this->form_validation->set_rules('gambar_berita', 'Gambar Berita', 'required');
        }
        if ($this->form_validation->run() == FALSE) {
            $this->load->view('ui/Header');
            $this->load->view('pages/Berita', $data);
            $this->load->view('ui/Footer');
        } else {
            $config['upload_path'] = './images/berita';
            $config['allowed_types'] = "gif|jpg|png|jpeg";
            $config['max_size'] = '2000'; // max size in KB
            $config['encrypt_name'] = TRUE;
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            if (!$this->upload->do_upload('gambar_berita')) {
                $error = array('error' => $this->upload->display_errors());
                $this->session->set_flashdata('error', $error['error']);
                $this->load->view('ui/Header');
                $this->load->view('pages/Berita', $data);
                $this->load->view('ui/Footer');
            } else {
                $info = $this->upload->data();
                $image_path = $info['raw_name'] . $info['file_ext'];
                $data = [
                    "id_wartawan" => $this->input->post('wartawan_berita'),
                    "id_kategori" => $this->input->post('kategori_berita'),
                    "judul_berita" => $this->input->post('judul_berita'),
                    "isi_berita" => $this->input->post('isi_berita'),
                    "gambar_berita" => $image_path,
                    "tanggal_berita" => date('Y-m-d'),
                    "status_berita" => "false",
                    "ket_berita" => $this->input->post('ket_berita'),
                ];
                $addBerita = $this->berita->addBerita($data);
                if ($addBerita) {
                    redirect('pages/Berita', 'refresh');
                } else {
                    redirect('gagal', 'refresh');
                }
            }
        }
    }
    public function delete($id)
    {
        $this->berita->deleteBerita($id);
        redirect('pages/Berita', "refresh");
    }
    public function update($id)
    {
        $data['judul'] = "Update Berita";
        $data['tampil_berita'] = $this->berita->getBeritaById($id);
        $data['tampil_kategori'] = $this->berita->getAllKategori();
        $data['tampil_wartawan'] = $this->berita->getAllWartawan();
        $this->form_validation->set_rules('judul_berita', 'Judul Berita', 'required');
        $this->form_validation->set_rules('isi_berita', 'Isi Berita', 'required');
        if (empty($_FILES['gambar_berita']['name'])) {
            $this->form_validation->set_rules('gambar_berita', 'Gambar Berita', 'required');
        }
        if ($this->form_validation->run() == FALSE) {
            $this->load->view('ui/Header');
            $this->load->view('pages/update/Berita_update', $data);
            $this->load->view('ui/Footer');
        } else {
            $config['upload_path'] = './images/berita';
            $config['allowed_types'] = "gif|jpg|png|jpeg";
            $config['max_size'] = '2000'; // max size in KB
            $config['encrypt_name'] = TRUE;
            $this->load->library('upload', $config);
            $this->upload->initialize($config);
            if (!$this->upload->do_upload('gambar_berita')) {
                $error = array('error' => $this->upload->display_errors());
                $this->session->set_flashdata('error', $error['error']);
                $this->load->view('ui/Header');
                $this->load->view('pages/update/Berita_update', $data);
                $this->load->view('ui/Footer');
            } else {
                $id_berita = $this->input->post('id_berita');
                $info = $this->upload->data();
                $image_path = $info['raw_name'] . $info['file_ext'];
                $data = [
                    "id_wartawan" => $this->input->post('wartawan_berita'),
                    "id_kategori" => $this->input->post('kategori_berita'),
                    "judul_berita" => $this->input->post('judul_berita'),
                    "isi_berita" => $this->input->post('isi_berita'),
                    "gambar_berita" => $image_path,
                    "ket_berita" => $this->input->post('ket_berita'),
                ];
                $updateBerita = $this->berita->updateBerita($data, $id_berita);
                if ($updateBerita) {
                    redirect('pages/Berita', 'refresh');
                } else {
                    redirect('gagal', 'refresh');
                }
            }
        }
    }
}

【问题讨论】:

  • id 你在 MODEL 中定义了方法,然后在你可以使用的任何控制器中。首先加载特定模型,然后从控制器调用模型方法。
  • @DevsiOdedra 对不起,我可以举个简单的例子吗?
  • 您可以使用 CI 3 从控制器调用模型,而不是从模型到模型。
  • @DevsiOdedra 哎呀,我想我想念将 Controller 写到 Model,我编辑了它。对不起
  • 您必须从tampil_halaman_berita 返回数据并根据您的index 传递,函数调用没问题,但您没有将数据传递给查看。

标签: php codeigniter


【解决方案1】:

在这里,您需要使用 PASS BY REFERENCE&amp; 概念来解决您的问题

public function tampil_halaman_berita(&$data)//changes
    {
        $data['tampil_berita'] = $this->berita->getAllBerita();
        $data['tampil_kategori'] = $this->berita->getAllKategori();
        $data['tampil_wartawan'] = $this->berita->getAllWartawan();
    }
    public function index()
    {
        $data = array();
        $data['judul'] = "Halaman Berita";
        $this->tampil_halaman_berita($data);//changes
        echo '<pre>';print_r($data);die;
        $this->load->view('ui/Header');
        $this->load->view('pages/Berita', $data);
        $this->load->view('ui/Footer');
    }

尝试我的代码进行测试,让我知道你看到了什么?

【讨论】:

  • 成功了!我能知道&amp; 的功能吗?是为了全局定义?
  • 这仅适用于控制器级别,如果您想在所有控制器或模型中使用此功能,则需要在助手中定义它
【解决方案2】:
-First load model in your tampil_halaman_berita() method
-get data using Model and return data
-then call first method to another method

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2010-11-24
    • 2017-11-04
    • 2023-03-29
    • 2012-01-12
    相关资源
    最近更新 更多