【问题标题】:Codeigniter - creating views QCodeigniter - 创建视图 Q
【发布时间】:2011-08-01 14:55:17
【问题描述】:

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

【问题讨论】:

  • 我无法想象拥有超过 1 个控制器会花费您超过 5 分钟的时间,这是相同的代码,只是以更有条理的方式。控制器就是您组织代码的方式。如果您只有一个简单的类似小册子的网站,您可能只需要/想要一个控制器。

标签: php codeigniter


【解决方案1】:

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

【讨论】:

  • 正是我当前输入的内容。 :) 而且这不一定是更多的工作,这取决于控制器可以共享的代码量。
【解决方案2】:

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

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 代表模型-视图-控制器,并建议一对一的关联,但对同一个控制器使用不同的视图我怀疑它可以被认为是“不好的做法”;正如已经说过的那样,没有真正理想的方法来做到这一点,重要的是保持逻辑分离并使您的代码结构良好且有条理,尤其是在团队工作时。

【讨论】:

  • 这个例子是用于有登录和未登录用户的网站吗?就像用户登录显示版本 A 的标题一样。如果用户未登录显示版本 B 的标题,如 facebook,根据用户的会话,同一页面的 ehaders 会有所不同?
  • 好吧,我提到了表单验证(服务器端),当然你也可以这样做。您检查用户是否已登录(如果($this->session('authorized')),例如),以防加载标题视图,而不是加载另一个。逻辑还是一样的
【解决方案3】:

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

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

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

任何包含 'page' 的 URI 请求都将由 'page' 控制器和 'get_page' 方法处理。您可以使用$this->uri->segment(2) 获取页面标题或页面ID。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

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

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

      这样,如果您有超过 1 人在网站上工作,您可以指定 1 人负责前端,另一个人负责后端。

      此外,您可以将它们分成更小的模块。比如前端有一个home页面和一个article页面(当然你对它们有不同的看法),如果你觉得你也可以把它们分解它们足够复杂。但如果您认为它们很简单,那么您可以为这些视图使用 1 个控制器。

      【讨论】:

        猜你喜欢
        • 2011-12-15
        • 1970-01-01
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        • 2016-09-14
        • 2014-03-11
        • 1970-01-01
        相关资源
        最近更新 更多