簡體   English   中英

Symfony MVC 控制器最佳實踐

[英]Symfony MVC best practice for controllers

在 Symfony/Doctrine/PHP 項目中,客戶抱怨我們違反了軟件開發最佳實踐。 抱怨是關於源代碼分層不當,以及缺乏單元測試。

  • 這是一個低於 5 萬美元的項目。
  • 相信客戶端有Java界的高手,可能是Spring Framework,看源碼。

正如我們所見,我們一直在使用適當的 MVC。

  • 視圖邏輯完全由 TWIG 處理。
  • 數據庫完全由 Doctrine 處理。
  • 我們使用 Symfony Security 進行訪問控制($this->get('security.context')->isGranted('ROLE_ADMIN')$this->get('security.context')->getToken()->getUser()

請注意,自從我們開始這個項目以來,Symfony 已經稍微改變了模型——但仍然向后兼容。

在控制器中,客戶專門說控制器處理是錯誤的:

  • 訪問控制(通過 Symfony Security)
  • 數據庫查詢(通過 Doctrine)
  • 用於發回響應的“解析和其他邏輯”( return $this->render('some_template.html.twig');

問題

客戶說最好的做法是讓控制器簡單地將請求傳遞到系統中更遠的另一層

此外,他說用戶管理基於“自定義模型”,其中所有用戶和角色都存儲在數據庫中 - 這使得插入不同的訪問控制系統變得困難。 特別是因為角色名稱似乎是硬編碼的,例如通過諸如($this->get('security.context')->isGranted('ROLE_ADMIN')

所以; 這個領域有明確的最佳實踐嗎? 屬於控制器的東西,是 Doctrine、Twig、Symfony Security,“足夠”是“控制器下方”的一個單獨層。

例如,控制器和 Doctrine 之間是否應該還有另一層?

來源: http : //fabien.potencier.org/what-is-symfony2.html

首先,什么是Symfony2?

首先,Symfony2 是一組可重用的獨立、解耦和內聚的 PHP 組件,用於解決常見的 Web 開發問題。

那么,基於這些組件,Symfony2 也是一個全棧的 web 框架。

根據您的項目和您的需要,您可以選擇一些 Symfony2 組件並使用它們開始您的項目,或者您可以使用全棧框架並從它提供的開箱即用的緊密集成中受益。 在兩種不同的方法之間進行選擇完全取決於您。

Symfony2 是一個 MVC 框架嗎?

Symfony2 實際上是為控制器部分、視圖部分提供工具,而不是為模型部分提供工具。 您可以手動創建模型或使用任何其他工具(如 ORM)。 當然,對於 Doctrine2 和 Propel 等最著名的 ORM 來說,緊密集成是存在的。 但它們是可選的依賴項。 Symfony2 的核心特性不會也永遠不會依賴於任何 ORM。

Symfony2 是一個 HTTP 框架; 它是一個請求/響應框架。 這就是大事。 Symfony2 的基本原則以 HTTP 規范為中心。

關於最佳實踐的 Symfony: https : //symfony.com/doc/current/best_practices.html

您應該閱讀有關控制器最佳實踐的內容:https ://symfony.com/doc/current/best_practices.html#controllers

您可以閱讀此答案https://stackoverflow.com/a/21701890/2160958

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM