我有4個物體(小說,短篇小說,非小說,科幻),所有這些都是從一本書基類中擴展而來的。用戶可以查看書籍詳細信息頁面,該頁面應根據書籍類型顯示不同的詳細信息。所以,理想情況下,我可以有4個差異視圖腳本,根據所選圖書的類型調用它們。我將如何做到這一點?我應該在每個對象中存儲指向視圖腳本的鏈接嗎?我應該在控制器操作中使用switch語句來確定正確的視圖嗎?如何根據對象類型選擇視圖?
0
A
回答
1
爲視圖腳本/文件命名爲具有詳細後綴的對象(例如novel_details.php)。
所以,當你顯示/渲染視圖,您解析對象的名稱,詳情sufix
$this->render($object->name."_details.php");*
編輯:*這一切都取決於雖然其MVC框架您使用。
0
您是在自己實現MVC還是使用預先存在的框架?導軌型構架通常都會有類/方法和要求,例如:
GET /book/view/id/1 --> Book::view(1)
根據您的模型的結構之間一個很好的映射,這可以映射到一本書GUID;其中,ID是指小說,而不是一本書,ID
GET /book/view/type/novel/id/3 --> Novel::view(3)
:或者,如果你堅持這樣一個類型層次,你可能會喜歡的東西等。另外:
GET /novel/view/id/3 --> Novel::view(3)
將相同的工作。
也許更有針對性的,你應該贊成組成繼承;有沒有任何理由有4種類型的書籍?他們真的有什麼不同?如果它們僅僅根據它們包含的元數據的類型而不同,那麼可以考慮以某種方式封裝該差異,而不是按照類型層次結構移動(例如,如果影響各種類型書籍的方法類似,則可能會只需將適用於特定書籍類型的任何算法分解出來,然後使用對象組合將該功能包含在您的類中)。我認爲這也可以讓你簡化你的視圖結構,間接地給你一個更清晰的解決方案來解決這個問題。
0
你可以有...
$bookTypeToView = array(
'novel' => 'novel.php',
'short_story' => 'short.php'
...
);
然後做類似的東西...
$this->view = isset($bookTypeToView[$book['type']]) ? $bookTypeToView[$book['type']] : 'default';
相關問題
- 1. 根據兩種對象類型選擇正確的策略
- 2. 根據選定的條件驗證MVC3視圖模型對象
- 3. 根據對象類型將視圖注入到ItemsControl中
- 4. 如何根據當前DataContext視圖模型動態選擇視圖
- 5. 如何根據複選框從視圖中傳遞對象?
- 6. 爲對象類型選擇正確的視圖
- 7. 根據鍵值對選擇json對象
- 8. 如何根據類型「功能」檢查對象的類型
- 9. 根據視圖傳遞的對象ID篩選外鍵選擇選項
- 10. 如何根據字段值不NG-模型對象選擇選項
- 11. 根據ViewModel類型爲ItemsControl選擇DataTemplate
- 12. 根據類型選擇BitConverter.ToXXX函數
- 13. 根據日期範圍選擇對象
- 14. 使用Ember.js按模型類型/對象值選擇視圖模板
- 15. 根據其類型創建java對象
- 16. 根據其類型鑄造對象
- 17. 根據類型返回對象
- 18. 爲什麼不根據其對象的運行時類型選擇此方法?
- 19. 我怎麼選擇的對象類型
- 20. LINQ選擇由類型的對象
- 21. 如何根據對象instanceof選擇要執行的操作?
- 22. 如何根據對象的值爲組合框選擇模板
- 23. 如何根據用戶選擇顯示對象屬性?
- 24. 如何根據HTML選擇元素更改其他對象
- 25. 如何根據MongoEngine的特定條件選擇多個對象?
- 26. 根據Angular 2中的下拉選擇選擇輸入類型
- 27. 如何爲WPF視圖模型和數據模型類選擇命名約定?
- 28. Django - 如何根據前端下拉選擇更新視圖?
- 29. 如何根據行選擇推送視圖?
- 30. 如何根據選擇器視圖中選擇的行組件更新表視圖數據
考慮我理解你的話,我想我會建議去爲開關。 – Khez 2011-04-11 01:44:27
Rails和類似的框架不是通過類名的靜態映射 - >某些文件,而是通過一個通常涉及多元化和基礎路由器的約定實現的。例如,route/novel /:novel_id映射到novel.tpl.php視圖和NovelController.php以及Novel.php模型文件。 – canuckistani 2011-04-11 02:56:48