[英]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)
并预先加载header
和footer
,这是使它变干的最简单方法。
最后,在您的控制器中,它应该是这样的:
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.