【问题标题】:How am I supposed to pass class data to my Views using Codeigniter?我应该如何使用 Codeigniter 将类数据传递给我的视图?
【发布时间】:2012-02-29 15:48:36
【问题描述】:

我正在使用 Codeigniter 构建一个 Web 应用程序,并且我正在尝试遵循正确的 OOP、MVC 和 Codeigniter 约定。有几件事肯定是在逃避我。下面是我困惑的简单解释。

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

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

$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 实例,因为我在每个个人资料页面上都有相关公司的列表。

【问题讨论】:

    标签: model-view-controller oop codeigniter


    【解决方案1】:

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

    <?php echo $company_name ?> 
    

    这对于非技术人员来说比理解要容易得多

    <?php echo $company->getName(); ?>
    

    【讨论】:

      【解决方案2】:

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

      假设您稍后决定更改数据库结构。您只需要重写模型以返回相同的类并保持前端代码不变。也可以把视图交给某个网页设计师设计,不用告诉他数据库结构什么的等等。

      当您在团队中工作时,MVC 的主要优势之一就会显现出来。每个人都可以统一地做这些事情,而不是提出自己的约定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-02
        • 2011-11-24
        • 2012-08-06
        • 1970-01-01
        • 2016-06-03
        • 2010-09-27
        • 1970-01-01
        • 2011-02-24
        相关资源
        最近更新 更多