我应该如何使用Codeigniter将类数据传递给我的视图?

时间:2012-02-08 07:43:34

标签: model-view-controller oop codeigniter

我正在使用Codeigniter构建一个Web应用程序,我正在尝试遵循正确的OOP,MVC和Codeigniter约定。有些事情肯定会让我失望。下面简单解释了令我困惑的事情。

我有'公司'表和Companies_model。此模型具有私有变量,如id,name和url。此模型有一个名为load_data($ id)的方法,该方法使用id将有关公司的所有数据加载到类变量中。这个$ id来自URL。最后,这个模型具有返回值的公共getter。

我的网站上有我的系统中每家公司的个人资料页面。在我的公司控制器中,我按以下方式加载该公司的数据。

$this->load->model( 'Companies_model', 'Companies_profile' );
$this->Companies_profile->load_data( $this->uri_company_id );

当我的其他逻辑在控制器中完成时,我有以下代码来呈现视图:

$this->data['Companies_profile'] = $this->Companies_profile;
$this->load->view( 'profiles/companies_profile_view', $this->data );

在我看来,我渲染这样的数据:

<p>This company's name is <?php echo $Company_profile->get_name(); ?>.</p>

所有这一切似乎都是多余的。为什么我在Companies_method的特定实例中已经可以将数据传递给视图?我感到困惑,我做错了什么,但我无法弄清楚那是什么。也许我没有做错什么,但还没有遇到过这种结构的原因。总的来说,我的应用程序相当简单。有人能否阐明如何正确组织和传递数据到视图?为什么要传递数据,而不只是在CI的基类中使这一切都可用,$ this?

注意:我在每个呈现的页面上都有Companies_model的多个实例,因为我在每个配置文件页面上都有相关公司的列表。

2 个答案:

答案 0 :(得分:2)

这就是MVC,至少就像它在CodeIgniter中所做的那样。分离显示值以从数据库中检索它们。在这种简单的情况下,优势并不明显。

想象一下,您以后决定更改数据库结构。您只需要重写模型以返回相同的类并保持前端代码不变。您还可以将视图提供给某个Web设计人员进行设计,而不会告诉他任何有关数据库结构等的信息等。

当您在团队中工作时,MVC的一个主要优势就会出现。每个人都可以统一地完成这些工作,而不是提出自己的惯例。

答案 1 :(得分:1)

将类对象传递给他的视图打破了MVC背后的想法。 MVC旨在将编程的各个部分分解为3个方面。模型,视图和控制器。传递给视图的只是视图所需的内容。视图可能不需要整个对象。它可能只需要来自对象的某些信息。它允许您使业务逻辑远离视觉设计。它允许知道HTML和一点PHP的Web设计人员进入并进行更改,而无需了解对象的工作方式。他看到了。

<?php echo $company_name ?> 

对于非技术人员来说,解释比

容易得多
<?php echo $company->getName(); ?>