[英]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.