因此,您需要确保了解路由,以确保所有内容都映射到 URL 的第一段,因为您实际上只需要一个控制器。这是在名为 routes.php 的文件中的 application/config 文件夹中
你会想要这样设置:
$route['(:any)'] = "home/$1";
$route['default_controller'] = "home";
所以它匹配第一段中的任何内容(:any)并将其路由到 home/$1(控制器/函数)......然后如果第一段中没有任何内容,则将其映射到 home/(索引函数这是暗示的)。查看 routes 文件的文档,以便了解您可以使用它做什么(您可以运行正则表达式、高级路由等),了解这一点非常重要。
通过这种方式,在您的 home.php 控制器(controllers/home.php 或任何您想调用的名称)中,您可以拥有与您的 url 匹配的函数
其他帖子中提到的关于扩展基本控制器的内容在这种情况下并不是真正必要的。但是很高兴有一个可以为您加载视图的功能
这样您就不必为每个功能重复$this->load->view(header) 和$this->load->view(footer) 等。
我喜欢用我的页眉、页脚、导航等创建一个包含文件夹。创建一个可以做到这一点的函数...具有私有可访问性,如下所示:
private function viewloader($view, $data) {
$this->load->view('includes/header', $data);
$this->load->view('includes/nav', $data);
$this->load->view($view, $data);
$this->load->view('includes/footer', $data);
}
...或者在函数之前使用 codeigniter 的内置下划线,使其无法通过 URL 访问
function _viewloader($view, $data) {
$this->load->view('includes/header', $data);
$this->load->view($view, $data);
$this->load->view('includes/footer', $data);
}
然后你的每个页面的函数看起来像这样:
function about()
{
/* put any application logic here */
$this->viewloader('about', $data);
/* or $this->_viewloader('about', $data);
if you went with CI's style visibility */
}
function contact()
{
/* put any application logic here */
$this->viewloader('contact', $data);
/* or $this->_viewloader('contact', $data);
if you went with CI's style visibility */
}
所以现在你可以看到,viewloader 函数现在加载了页眉、导航、任何 $view 的视图,然后一次加载页脚......非常好。
您还可以记住,可以在视图文件本身(嵌套视图)中加载您需要的任何视图,它们并不总是必须从控制器加载,尽管保持这种方式很好如果要进行重大更改,则不必编辑单个视图文件。
这可能是最后的样子:
<?php
if (! defined('BASEPATH')) exit('No direct script access');
class home extends CI_Controller {
//php 5 constructor
function __construct() {
parent::__construct();
}
function index() {
$data['title'] = "Welcome To Our Site"
$this->viewloader('home', $data);
}
function contact() {
$data['title'] = "Contact Us"
$this->viewloader('contact', $data);
}
function about() {
$data['title'] = "About Us"
$this->viewloader('about', $data);
}
private function viewloader($view, $data) {
$this->load->view('includes/header', $data);
$this->load->view('includes/nav', $data);
$this->load->view($view, $data);
$this->load->view('includes/footer', $data);
}
}