gpt4 book ai didi

symfony - 在 symfony 2 中记录实体特定警告的正确代码放置

转载 作者:行者123 更新时间:2023-12-02 14:22:40 25 4
gpt4 key购买 nike

我的问题是关于 symfony 2 中实体、存储库和逻辑代码的正确和预期使用。

我有一些专门用于该实体的逻辑,因此我将逻辑代码放入该文件中。我想做的一件事是记录此实体发生的特定警告或调试信息。

例如,这些函数在我的实体中:

/**
* @return ArrayCollection|Humanoid[]
*/
public function getHumanoidPrimary()
{
$humanoid = $this->getHumanoidByPersonType(Humanoid::TYPE_PRIMARY);
if ($humanoid->count() > 1){

//This is what I was planning to do
$this->logger->warn('you should not have more than 1 primary. there is a problem');

}
return $humanoid->first();
}

/**
* @param $personType
* @return Humanoid[]|null|ArrayCollection
*/
private function getHumanoidByPersonType($personType)
{
//get the current step from the collection
$criteria = Criteria::create()->where(Criteria::expr()->eq("personType", $personType));
$humanoidsByType = $this->humanoids->matching($criteria);
if ($humanoidsByType instanceof Humanoid) {
return $humanoidsByType;
} else {
//todo: figure out how to log this warning.
throw new \LogicException("No humanoid of personType:$personType Stored in property");
}
}

我读到的大部分文档都说实体代码不应该知道除了它自己和其他实体之外的任何东西。

这是我的问题:

  1. 在 symfony 2 中记录警告的正确方法是什么?
  2. 这里适合放置此代码吗?
  3. 是否应该将此代码移至另一个类?它应该是一项服务吗?
  4. 将其移至存储库似乎不对。存储库用于更复杂的数据请求,而不是逻辑。这是正确的吗?

这些都是菜鸟问题,但看起来我是在与代码作斗争,而不是正确使用它。

最佳答案

这是一个有趣的问题,因为经过近两年的 symfony2 开发,我需要停止思考一个可接受的答案。

  1. 在 symfony2 中记录警告的正确方法是 $this->logger->warning 所以您已经接近正确的解决方案。
  2. 如果您想遵循 symfony2 准则,则永远不应该将代码逻辑片段插入实体类中。我从未在第三方 bundle 中看到过这种情况,因此我认为这是避免将此代码包含到实体中的好习惯。
  3. 通常,对于此类任务,我会创建一个 EntityNameManager(因此在这种情况下为 HumanoidManager),基本上我将其创建为服务并在实体中使用它
  4. 是的,存储库中应该只放置与数据库相关的代码。

附带问题

  1. 不要害怕助手/经理的数量。如果您知道某些功能可以实现到父类(super class)中,那就去做吧。否则我不认为这应该是一个问题(想想存储库:每个实体都可以(并且如果需要的话必须)拥有自己的)。此外,在您使用服务之前,服务不会被调用(启动)。当然,如果该文件增加,我无法评估 xml 或 yml 文件处理时间,这可能很有趣。
  2. 嗯,我已经看到 bundle 用于将管理器放入实体文件夹本身。否则你可以做任何你想做的事:在这种情况下,命名约定(当然,除了命名空间声明等)并不重要。如果你想将 Entity 与其 Manager 分开,BundleName/Manager 就可以了。
  3. 就我个人而言,我习惯将记录器注入(inject)管理器中。

关于symfony - 在 symfony 2 中记录实体特定警告的正确代码放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25854518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com