簡體   English   中英

如何獲得 object 是 Symfony 中的每個響應?

[英]How can I get an object is every response in Symfony?

語境

我的項目中有一個實體User和一個實體Cart 兩個實體之間存在ManyToOne關系:

/* /src/Entity/User.php */

/**
* @ORM\OneToMany(targetEntity="App\Entity\Cart", mappedBy="user", orphanRemoval=true)
*/
private $carts;
/* /src/Entity/Cart.php */

/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="carts")
* @ORM\JoinColumn(nullable=false)
*/
private $user;

我的CartRepository中還有一個方法,它返回用戶的當前購物車。

/*src/Repository/CartRepository.php */

/**
* @param User $user
* @return mixed
* @throws NonUniqueResultException If the user somehow has several non-validated
* carts bidden to their account.
*/
public function findCurrentUserCart(User $user)
{
    /* ... */
}

我的問題

我想做的是能夠輕松訪問當前用戶購物車中的當前購物車項目數,以便我可以在導航欄中顯示它。 為此,我需要能夠輕松訪問用戶當前的購物車。

我想過通過 controller 來獲取它,但這似乎很煩人,因為在網站的所有頁面上都需要該信息(因為它在導航欄中),所以我需要從每個操作中檢索計數控制器。

然后我考慮在我的User實體中使用簡單的 function,例如getCartTotalCount()但這意味着直接從我的User實體使用CartRepository ,恕我直言,感覺不對(我的意思是,我的實體是一個普通的 object,我不覺得就像獲取存儲庫是 go 的好方法一樣,是嗎?)

所以我的問題是:有沒有辦法全局獲取當前的購物車 object,所以我可以在我的所有視圖中擁有它,而無需在我的控制器中的任何單個render()方法中傳遞它? 或者也許有另一種方法來 go?

假設您使用 twig 來呈現您的模板,您必須創建一個擴展。 將 twig 擴展聲明為服務,您可以直接在服務構造函數中注入實體管理器或存儲庫。

Here's the documentation on symfony docs on how to create a twig extension: https://symfony.com/doc/current/templating/twig_extension.html

在這種情況下,您需要創建自定義 twig function。

即使 Twig 擴展看起來像是一個可行的解決方案,我也會采取不同的做法:使用嵌入式 controller,您擁有更多控制權。 將購物車模板片段放在一個不同的文件中,創建一個 controller 來渲染這個小片段,然后使用

{{ render(controller(
    'App\\Controller\\CartController::cartNavbar'
)) }}

如果顯示此信息的模板增加(例如,當您想為空購物車使用一個圖標,如果購物車中有東西則使用另一個圖標),您會發現這比使用擴展更有助於分離關注點

暫無
暫無

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

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