2010-09-28 17 views
0

這是我關於使用Kohana框架的一個問題,但我想這是一般可以應用於MVC框架的問題。在Kohana/MVC中處理與關係的表格

比方說,我有2個對象/模型,一個動物對象和一個農場對象,一個動物屬於一個農場,一個農場有很多動物。我有一個用於創建新動物的表單,我希望有一個下拉菜單來選擇它屬於哪個農場。我的問題是如何最好地處理從農場表中獲取數據並將其顯示在表單中。

以下是我提出的一些可能的解決方案,但我不確定它們中的哪一個都是最好的方法。另外,我計劃使用的Kohana的Form助手庫,但似乎只處理的HTML表單的渲染:

  1. 獲取在AnimalModel的數據,把它傳遞給控制器​​,它傳遞給表單視圖。但我不確定這是否應該是AnimalModel的責任。
  2. 從FarmModel獲取數據。我擔心的是,這是有很多關係的東西,控制器將不得不開始調用很多不同的控制器。
  3. 存儲傳遞給AnimalModel中各種表單方法的所有數據。這也涉及存儲類似的東西,這看起來應該不在模型中。
  4. 編寫一些輔助對象/庫來存儲所有表單數據,並將其保存在模型或控制器中。雖然如此,我覺得這最終會伴隨着顯示和業務邏輯的混合,我想享受這些。

我在設計這個時遇到的另一個問題是其他的東西,比如驗證,還有當我想要表單處於「編輯」模式時要做什麼,我需要預先填充它來自模型的數據。

處理Kohana/MVC框架中關係的書寫表單的最佳方法是什麼?

回答

1

也許我錯過了你的問題,但它看起來像你過分複雜的事情。使用Farm模型獲取所有農場的列表。使用此列表在您的表單中創建一個選擇。

<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 
} 

您的視圖可以做somethign這樣

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

我可能會過於複雜的事情,也是我給的例子是一個簡單的問題。當對象有一堆其他關係時會發生什麼? – GSto 2010-09-28 18:24:29