我正在尝试从AngularJS迁移到PHP模型-视图-控制器框架,有些东西不粘在我身上,因为我重复了很多。在角度中,您可以简单地包含页脚和页眉,并且所有魔术都会根据路线在视图中发生。但是在每个视图的Codeiginiter中,您都需要包含页眉和页脚。有什么好的做法,你不必做太多重复
在angularjs中,我有简单的。
<div ng-include='"templates/header.html"'></div>
<div ng-view></div>
<div ng-include='"templates/footer.html"'></div>
这是路由
.when("/", {
templateUrl: "partials/home.html",
controller: "PageCtrl"
})
// Pages
.when("/home", {
templateUrl: "partials/home.html",
controller: "PageCtrl",
})
.when("/about", {
templateUrl: "partials/about.html",
controller: "PageCtrl"
})
这就是在CodeIgniter中完成的方式
public function home(){
$this->load->view('templates/header');
$this->load->view('about');
$this->load->view('templates/footer');
}
public function about(){
$this->load->view('templates/header');
$this->load->view('index');
$this->load->view('templates/footer');
}
您可以放在文件的顶部和底部:
查看文件:
<?php
$this->load->view('templates/header');
// your main file (index;about etc)
$this->load->view('templates/footer')
因此,在控制器中,您可以只加载主文件,即
控制器文件:
public function home()
{
// $this->load->vars($data)
$this->load->view('index');
}
还要学习 Loader 类以了解如何为所有这些文件设置变量。
在您的控制器中,您可以使用下面给出的简单方法 指定所有页面的页眉和页脚。
控制器
class Home extends CI_Controller {
public function index()
{
$headerData = array(
"pageTitle" => "Home",
"stylesheet" => array("home.css")
);
$footerData = array(
"jsFiles" => array("home.js")
);
$viewData = array(
"viewName" => "home",
"viewData" => array(),
"headerData" => $headerData,
"footerData" => $footerData
);
$this->load->view('template',$viewData); // load `Home` view to template file in view folder.
}
视图(模板.php)
$this->load->view("includes/header.php",$headerData);
$this->load->view($viewName.".php",$viewData);
$this->load->view("includes/footer.php",$footerData);