Php Codeigniter-创建视图Q

Php Codeigniter-创建视图Q,php,codeigniter,Php,Codeigniter,我不太懂技术,但我想知道,因为我的技术团队正在以这种方式实施: 我们是否需要为需要在网站上调用的每一组视图创建一个“控制器”文件,或者我们是否可以从一个控制器控制所有视图?让多个控制器控制所有视图似乎需要更多的工作。我想让一名控制员调用所有视图以缩短项目时间,但不确定这是否可行,甚至是一种好的做法?这既不是好的做法,也不是坏的做法。重要的是你的代码清晰且结构良好。之后,CodeIgniter在如何使用控制器和视图方面为您提供了很大的灵活性。就个人而言,我倾向于每个动作使用一个视图(因此一个控制器

我不太懂技术,但我想知道,因为我的技术团队正在以这种方式实施:
我们是否需要为需要在网站上调用的每一组视图创建一个“控制器”文件,或者我们是否可以从一个控制器控制所有视图?让多个控制器控制所有视图似乎需要更多的工作。我想让一名控制员调用所有视图以缩短项目时间,但不确定这是否可行,甚至是一种好的做法?

这既不是好的做法,也不是坏的做法。重要的是你的代码清晰且结构良好。之后,CodeIgniter在如何使用控制器和视图方面为您提供了很大的灵活性。就个人而言,我倾向于每个动作使用一个视图(因此一个控制器通常控制多个视图)。

是的,这是可能的;您可以自己轻松地进行测试:

class Customcontroller extends CI_Controller {

    function index()
    {
      $data['test'] = 'test';
      $this->load->view('header', $data);
      $this->load->view('body');
      $this->load->view('footer');
    }    
}
您会注意到,通过这种方式,
$data
将可用于所有视图,即使在加载时没有单独传递

我发现用视图作为块来构建页面是一种很好的方法。因此,您还可以根据一些约束条件显示视图:

  $this->load->view('header');
 if($this->form_validation->run() == FALSE)
 {
    $this->load->view('display_form');
 }
  else
 {
   $this->load->view('form_sent');
 }
 $this->load->view('footer');
比如说


尽管MVC代表模型-视图-控制器,并建议一对一的关联,但对同一个控制器使用不同的视图,我怀疑这可能被视为“坏习惯”;如前所述,没有一种真正理想的方法可以做到这一点,重要的是保持逻辑分离,并使您的代码具有良好的结构和组织,尤其是在团队中工作时。

这实际上取决于您的控制器应该做什么。例如,如果您只想显示博客文章或内容页,那么您可以只使用一个名为“blog”或“pages”的控制器。控制器处理逻辑。如果您有许多想要运行的功能(如帐户、事件、照片等),通常明智的做法是为每个功能分配自己的控制器,以便它们可以使用自己的模型适当地处理操作

如果您使用像CodeIgniter这样的框架,您可以使用它们的routes功能通过特定的控制器自动路由特定的URL。例如,如果希望页面的URL为-,则需要在routes配置文件中使用此行:

$route['page/(:any)'] = 'page/get_page';

任何包含“page”的URI请求都将由“page”控制器和“get_page”方法处理。您可以使用
$this->uri->segment(2)

获取页面标题或页面id。我将有一个使用多个视图的控制器。这里是如何。我的网页有共同的页眉、页脚和导航结构,因此这些视图对所有网页调用都是共同的,因此控制器可以继承一个方法,该方法获取内容并使用页眉/页脚/共同视图组合页面。对于显示网格,我可能有一个公共网格视图,我可以在多个控制器中继续使用它来显示表格数据。不同的用例可以重用某些视图。因此,您可以在一个控制器中使用多个视图是有意义的。

codeigniter本身并不限制您使用多少个控制器

但作为一个基本想法,我倾向于将控制器分成模块

例如,如果你的站点有一个前端和一个后端,我会将它们分开,所以我有两个控制器(每个控制器都有自己的视图)

这样,如果站点上有多人工作,则可以指定一人负责前端,另一人负责后端


此外,您还可以将它们拆分为更小的模块。例如,在前端有一个主页和一个文章页面(当然你对这些页面有不同的视图),如果你觉得它们足够复杂,你也可以将它们分解。但是,如果您认为它们很简单,那么您可以使用一个控制器来处理这些视图。

正是我当前键入的内容。:)这不一定需要更多的工作,这取决于控制器可以共享的代码量。我无法想象拥有一个以上的控制器会花费你超过5分钟的时间,这是相同的代码,只是以一种更有条理的方式。控制器就是您组织代码的方式。如果你有一个简单的小册子,比如网站,你可能只需要/想要一个控制器。这个例子是用于有登录和非登录用户的网站的吗?例如,如果用户登录,则显示标题的版本。如果用户没有登录到标题的显示版本B,比如facebook,根据用户的会话,同一页面的eHeader是不同的?好吧,我指的是表单验证(服务器端),但当然你可以这样做。检查用户是否已登录(如果($this->session('authorized')),例如,如果加载一个标题视图,则加载另一个标题视图。逻辑仍然是一样的