Php CodeIgniter-将函数附加到要在所有页面上调用的视图

Php CodeIgniter-将函数附加到要在所有页面上调用的视图,php,codeigniter,Php,Codeigniter,我目前正在使用codeigniter进行电子商务。我已经完成了几乎所有的视图,现在开始编码(控制器和模型)。 对于登录,my ideia将在“俯视图”上设置其表单 问题是我必须在每个控制器中调用“俯视图”,并在每次调用时配置表单验证。 有一种合适的方法来处理它吗?有很多不同的方法来解决如何处理加载在许多不同页面上的常见重复html片段的问题 一种解决方案是向每个控制器添加一个helper函数,如下图所示的render\u page()函数。[注意:任何要加载的视图中需要的任何动态数据都应通过$d

我目前正在使用codeigniter进行电子商务。我已经完成了几乎所有的视图,现在开始编码(控制器和模型)。 对于登录,my ideia将在“俯视图”上设置其表单

问题是我必须在每个控制器中调用“俯视图”,并在每次调用时配置表单验证。
有一种合适的方法来处理它吗?

有很多不同的方法来解决如何处理加载在许多不同页面上的常见重复html片段的问题

一种解决方案是向每个控制器添加一个helper函数,如下图所示的
render\u page()
函数。[注意:任何要加载的视图中需要的任何动态数据都应通过$data参数传递。]

protected function render_page($main_view, $data=null){
  $this->load->view('top_view', $data);
  $this->load->view('menu_view');
  if(isset($main_view)){
      $this->load->view($main_view);
  }
  $this->load->view('footer_view');
}
同一控制器中的其他位置

public function index(){
  //do stuff including setting $data as needed
  $this->render_page('some_view', $data);
} 
这种方法的问题是需要在每个控制器中定义
render\u page()
。要解决这个问题,请在一个自定义库(类)中使用
render\u page()
idea,该库以类似的方式工作。然后自动加载该库,并在所需的任何控制器中使用其
render\u page()
方法

如果您创建了这样一个库并将其命名为
Viewmaster
,那么您将在控制器中使用它,如下所示(假设它是自动加载的)


我将让您来了解
Viewmaster
类的实现细节

你说的“顶视图”是什么意思。理想情况下,登录视图应该只调用一次。一旦用户登录,它就不会再次显示。你可以通过会话来处理这个问题。当然,用户可以在不必登录的情况下浏览整个站点,但是只要他决定登录或注册,表单就会出现在顶部。我在考虑做一个登录控制器,当他点击submit时会调用它。那么我可以在这个函数中处理表单验证吗?我试图在“俯视图”中提交表单,将操作指向登录控制器。但是它使表单验证方法没有被定义。不,表单验证不会在这个函数中发生。其目的只是收集和显示组成页面的多个视图文件。但是,您可以在处理验证的函数中使用
render\u page()
。对于验证设置,请阅读以获得一组可重用的规则。本文的主要问题不是视图设置本身,而是每次设置页面时都必须编写相同的表单验证代码。@kaio_san,您使用的是什么版本的CodeIgniter?
public function index(){
   //do stuff including setting $data as needed
   $this->viewmaster->render_page("some_view", $data);
 }