繁体   English   中英

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

[英]How to set up CodeIgniter controllers for similar forms in different directories

我正在使用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不允许这样做。 谁能建议一种可行的方法?

将您的函数称为“视图”几乎肯定是个坏主意……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文件?

其实可以。

在您的core文件夹中创建一个base_controller并将其MY_Controller.php并使其扩展CI_Controller并在MY_Controller创建一个方法,并将其命名为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)并预先加载headerfooter ,这是使它变干的最简单方法。

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

class Resources extends CI_Controller {

    public function app1($page = '')
    {
            // $data array in my_controller, it will automatically be passed inside render_view
            $this->data['title'] = ucfirst($folder); // Capitalize the first letter
            $this->render_view('app1/form');
    }

    public function app2($page = '')
    {
            $this->data['title'] = ucfirst($folder); // Capitalize the first letter
            $this->render_view('app2/form');
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM