如何在不同目录中为相似格式设置CodeIgniter控制器

时间:2018-11-22 20:44:32

标签: php codeigniter

我正在使用CodeIgniter访问各种表单类型

我有一个这样的目录:

-views
--resources
---app1
----form.php
---app2
----form.php
---app3
----form.php
---app4
----form.php

我的课程目前非常基础,但这

class Resources extends CI_Controller {

        public function app1($page = '')
        {
                $data['title'] = ucfirst($folder); // Capitalize the first letter

                $this->load->view('templates/header', $data);
                $this->load->view('resources/app1/form.php', $data);
                $this->load->view('templates/footer', $data);


        }

        public function app2($page = '')
        {
                $data['title'] = ucfirst($folder); // Capitalize the first letter

                $this->load->view('templates/header', $data);
                $this->load->view('resources/app2/form.php', $data);
                $this->load->view('templates/footer', $data);


        }

}

这似乎很冗长,也不需要为每种形式都提供一个方法。但是我找不到不创建新方法就如何更改目录的方法。理想情况下,我希望可以像$ page这样的arg传入新目录。例如:

class Resources extends CI_Controller {

        public function view($page = '')
        {
                $data['title'] = ucfirst($folder); // Capitalize the first letter

                $this->load->view('templates/header', $data);
                $this->load->view('resources/'. $folder. '/form.php', $data);
                $this->load->view('templates/footer', $data);


        }

}

但是,似乎CodeIgniter不允许这样做。谁能建议一种可行的方法?

2 个答案:

答案 0 :(得分:0)

将函数称为“视图”几乎肯定不是一个好主意... CI将此用于启动器的$ this-> load-> view()。

    public function app_form($page = '')
    {
        $data['title'] = ucfirst($folder); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('resources/'. $page. '/form.php', $data);
        $this->load->view('templates/footer', $data);

    }

应该可以,但是如何调用这些函数?通过routes.php文件?

答案 1 :(得分:0)

实际上可以。

base_controller文件夹中创建一个core,并将其命名为MY_Controller.php,使其扩展CI_Controller,并在MY_Controller中创建一个方法,并将其命名为{{ 1}}并在函数内部加载所需内容,以布局局部和模板,然后将视图传递给它:render, render_view, view

application/core/MY_Controller.php

,并为应用程序中的每个控制器扩展class MY_Controller extends CI_Controller { protected $data = array(); public function render_view($view = '') { $this->load->view('templates/header', $this->data); $this->load->view('view_path/'. $view, $this->data); $this->load->view('templates/footer', $this->data); } } ,每当您想要渲染视图时,就使用MY_Controller,并预先加载render_view($view)header,这就是使它变干的最简单方法。

最后在您的控制器中应该是这样的:

footer

}