【发布时间】:2020-06-06 19:49:53
【问题描述】:
上下文
我的项目中有一个实体 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)
{
/* ... */
}
我的问题
我想做的是能够轻松访问当前用户购物车中当前购物车项目的数量,以便我可以在导航栏中显示它。为此,我需要能够轻松访问用户当前的购物车。
我曾想过通过控制器获取它,但这似乎很烦人,因为由于网站的所有页面上都请求了信息(因为它在导航栏中),所以我需要从每个页面中检索计数控制器的动作。
然后我考虑在我的User 实体中使用一个简单的函数,例如getCartTotalCount(),但这意味着直接从我的User 实体中使用CartRepository,恕我直言,感觉不对(我的意思是,我的实体是一个普通的对象,我觉得获取存储库不是一个好方法,是吗?)
所以我的问题是:有没有办法全局获取当前的购物车对象,这样我就可以在我的所有视图中拥有它,而无需在我的控制器中的任何单个 render() 方法中传递它?或者也许还有其他方法可以走?
【问题讨论】: