代码之家  ›  专栏  ›  技术社区  ›  GSto

Kohana/MVC中带关系的表单处理

  •  0
  • GSto  · 技术社区  · 14 年前

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

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

    1. 获取AnimalModel中的数据,将其传递给控制器,控制器将其传递给窗体视图。但是我不确定这是否是动物模型的责任。
    2. 在AnimalModel中存储传递给各种form方法的所有数据。这还需要存储类之类的东西,这似乎不应该出现在模型中。
    3. 编写某种助手对象/库来存储所有表单数据,并将其保存在模型中,或者可能保存在控制器中。不过,我还是觉得这最终会混合显示和业务逻辑,这是我喜欢的。

    我在设计这个表单时的另一个顾虑是表单中出现的其他事情,比如验证,以及当我希望表单处于“编辑”模式时应该做什么,并且我需要用模型中的数据预先填充表单。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Galen    14 年前

    也许我错过了你的问题,但你似乎把事情搞得太复杂了。使用农场模型获得所有农场的列表。使用此列表可在窗体中创建选择。

    <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') ?>">