2011-03-07 44 views
1

我想從視圖中訪問Yii中的相關模型信息,並且需要創建一個方法。我不知道該方法是否應該在控制器或模型...相關活動記錄 - 控制器或模型方法?

該場景是: - 一站'有一個'商店 - 一個商店'屬於'站('商店'表有一個'station_id'列)

在站(站/視圖/ 1)的詳細視圖中,我想檢查天氣這個特定站有一個商店,如果是,我想從該商店返回ID 。

所以我的問題是:

1)我創建找到了這個信息,並把它放在控制器或模型的方法?

2)我應該問車站這個信息,或商店? 3)我知道控制器是模型和視圖之間的粘合劑,所以我把這種方法放在控制器中是有意義的。然而,在Yii中似乎通常的做法是在一個視圖文件如下:

CHtml::listData(Company::model()->findAll() 

這似乎是我的觀點一樣,用模型

回答

1

在模型可以建立的關係直接交互如果您使用Active Record,則可以在關係功能中的Station和Store模型之間進行切換。然後使用一行簡短的代碼(例如$ storeId = $ model-> store-> id;)就可以獲得Store的id。所以你可以很容易地把這些代碼放到你的控制器中,並保持控制器的精益(精益控制器,胖模型)。

由於您已經知道車站的編號,因此您應該向車站詢問車站。

如果視圖和模型之間不需要額外的邏輯,您可以跳過控制器。但不要忘記授權等事情。

+0

啊,Yii剛剛好多了,謝謝:) – djt 2011-03-07 23:52:40

0

沒錯,

由於您使用的活動記錄關係,你會做

$station = Station::model()->findAll(); 

$station->store 

,現在你有機會獲得在數據庫中存儲對象,所以你可以做

$station->store->id 
$station->store->name 

是Yii的是驚人的:)但是,這只是ActiveRecord的:)

也是它的常見做法,與控制器通信而不是直接從視圖模型。控制器處理驗證並在其正確後將其傳遞給模型。