【问题标题】:Handling Forms with Relations in Kohana/MVC在 Kohana/MVC 中处理具有关系的表单
【发布时间】:2010-09-28 17:20:16
【问题描述】:

这是我在使用 Kohana 框架时遇到的一个问题,尽管我认为这通常适用于 MVC 框架。

假设我有 2 个对象/模型,一个动物对象和一个农场对象,其中一个动物属于一个农场,一个农场有很多动物。我有一个用于创建新动物的表格,我想要一个下拉菜单来选择它属于哪个农场。我的问题是如何最好地处理从农场表中获取数据并将其显示在表单中。

以下是我想出的一些可能的解决方案,但我不确定其中任何一个是最好的方法。另外,我计划使用 Kohana 的表单助手库,但这似乎只处理表单的 HTML 呈现:

  1. 获取 AnimalModel 中的数据,将其传递给控制器​​,控制器将其传递给表单视图。但是我不确定这是否应该是 AnimalModel 的责任。
  2. 从 FarmModel 获取数据。我在这里担心的是某些东西有很多关系,控制器将不得不开始调用很多不同的控制器。
  3. 将传递给 AnimalModel 中各种表单方法的所有数据存储起来。这还涉及存储类之类的东西,这似乎不应该在模型中。
  4. 编写某种辅助对象/库来存储所有表单数据,并将其保存在模型中,或者可能是控制器中。尽管如此,我觉得这最终会混合显示和业务逻辑,我想享受它。

我在设计时担心的另一个问题是表单提出的其他事情,例如验证,以及当我希望表单处于“编辑”模式时该怎么做,并且我需要使用来自的数据预先填充它模型。

编写处理 Kohana/MVC 框架中关系的表单的最佳方法是什么?

【问题讨论】:

    标签: php model-view-controller forms kohana


    【解决方案1】:

    也许我错过了你的问题,但似乎你把事情复杂化了。使用农场模型来获取所有农场的列表。使用此列表在您的表单中创建一个选择。

    <select name="farm">
        <option value="1">Farm 1</option>
        <option value="2">Farm 2</option>
        <option value="3">Farm 3</option>
    </select>
    

    然后,当您保存您的动物时,您就拥有了它所属农场的主键。

    $animal = $_POST;
    if ( $animal->validate() ) {
        $animal->save(); //saves all your animal data as well as the farm it belongs to.
    }
    else {
        // show your view and display the animal data
    }
    

    你的视图可以做这样的事情

    <label>Animal Name</label><input type="text" value="<?php echo  $animal->getValue('name') ?>">
    

    【讨论】:

    • 我可能把事情复杂化了,但我给出的例子也很简单。当对象有一堆其他关系时会发生什么?
    猜你喜欢
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 2014-04-03
    相关资源
    最近更新 更多