Php 代码点火器-视图不违反DRY的最佳实践

Php 代码点火器-视图不违反DRY的最佳实践,php,codeigniter,codeigniter-2,dry,Php,Codeigniter,Codeigniter 2,Dry,试图确定在codeigniter中处理视图的最佳方法。现在我认为任何东西都太乱了。< /P> 目前我有3个相关观点: 1) 标题 2) 内容 3) 页脚 每个控制器都有类似的功能。某些控制器甚至多次执行此操作(同一控制器中的不同功能): 在每一页上都要加载页眉和页脚,这似乎很愚蠢。但是,每个页面的标题中的数据略有不同(元标记、样式表、加载的脚本等) 有没有更干净的方法让我这么做 谢谢 是-有一个模板视图。在控制器中: $this->load->view('head', $data);

试图确定在codeigniter中处理视图的最佳方法。现在我认为任何东西都太乱了。< /P> 目前我有3个相关观点:

1) 标题 2) 内容 3) 页脚

每个控制器都有类似的功能。某些控制器甚至多次执行此操作(同一控制器中的不同功能):

在每一页上都要加载页眉和页脚,这似乎很愚蠢。但是,每个页面的标题中的数据略有不同(元标记、样式表、加载的脚本等)

有没有更干净的方法让我这么做


谢谢

是-有一个模板视图。在控制器中:

$this->load->view('head', $data);
$this->load->view('volunteers/add_profile.php',$content_data);
$this->load->view('foot'); 
$data['header'] = xxx;
$data['content'] = xxx;
$this->load->view('my_template', $data);
然后在my_template.php视图文件中:

$this->load->view('head', $header);
$this->load->view('volunteers/add_profile.php',$content);
$this->load->view('foot'); 

@TheShift Exchange建议的,或者,如果您的应用程序允许,您可以从每个内容视图调用页眉和页脚视图(这是从控制器调用的唯一视图)

我喜欢使用类似于
renderPage('content\u view',$data)
的方法创建父控制器。该方法可以包括页眉、菜单、页脚等。。。这样,所有视图加载的内容都保存在控制器中,我不必为每个动作或视图的页眉、菜单或页脚而烦恼。它也很灵活,因为您的子控制器可以重新定义
renderPage()
方法以满足其用途

如果需要加载多个内容视图,可以创建一个
renderPage()
方法,该方法接受字符串数组而不是字符串。

请检查

因此,您可以始终使用模板库。但我不喜欢他们,因为某些原因

codeigniter允许您扩展其核心;如果你去上面提到的链接,你可以看到一个小例子

在本例中,每个扩展MY_控制器的控制器都将从这些defauls开始

protected        $body='base/body',
                        $title='Codeigniter Z master',//txt
                        $js=array(),//filename
                        $inline_js='',//script
                        $css=array(),
                        $inline_css='',//style
                        $breadcrumb=FALSE,//<li><a>
                        $content=array(),//html
                        $noEcho = FALSE;
如果要将视图加载到页面节中,请使用
$this->outv(视图路径、视图数据、节名称)

如果您只想将html加载到变量中,您可以使用

$this->out('Footer','Footer')

最后只需调用->_flush()

我还使用了其他一些选项,比如

$noEcho
;如果设置,则在将视图内容发送到浏览器之前,将清除所有缓冲区以删除任何回音

您还可以在MY_控制器内设置注销或登录等功能,任何ur控制器都可以访问该功能
http://localhost/ci/welcome/logout


无论如何:)我希望这能回答你的问题

我已经创建了自己的控制器,在这里我创建了
我的\u控制器扩展了CI\u控制器
类,然后在
我的\u控制器
中,我使用访问修饰符
$data
加载视图数组

public $data = array(); 
public $loadviewArray = array();
在此之后,我在
我的\u控制器中创建函数

public function loadview() {
   foreach ($this->loadviewArray as $key => $val) {
      $this->load->view($val, $this->data);
   }
}
然后我在
Admin
中创建控制器
并扩展
我的\u控制器
如下
管理员在
Admin
控制器创建函数
索引中扩展我的\u控制器

public function index() {
   $this->data["page_title"] = "Login";
   $this->data["records"] = $data; // You can pass data
   $this->loadviewArray = array("admin/header", "admin/login", "admin/footer");
   $this->loadview();
}

$data
访问修改器数组中,我在视图中传递数据,然后在
$loadviewArray
加载视图中调用加载视图的函数。您可以这样做,现在这对我非常有帮助。并分别创建页眉和页脚视图…

如何将$header数据从控件获取到my_template.php视图文件?您不能使用$this->加载内部视图文件@是的,你可以。我一直在做,看看我的答案(用户2727841),它会给你一个想法!!!检查@user2727841的答案…是否有理由拒绝投票?这同样有效,如果你想在里面加载另一个视图,比如admin/login,你可以使用$data['extra']=$this->load->view('view',$data,True)!或者说是什么;;
public function index() {
   $this->data["page_title"] = "Login";
   $this->data["records"] = $data; // You can pass data
   $this->loadviewArray = array("admin/header", "admin/login", "admin/footer");
   $this->loadview();
}