问题描述
我对Symfony 5及其循环依赖检测机制有疑问。
我定义了以下课程
namespace App\HTSC\Entity\Finance\Subscription;
/**
* Category
*/
class Category {
/**
* @var string
*/
private $name;
/**
* @var integer
*/
private $version = 1;
/**
* @var integer
*/
private $id;
/**
* @var array
*/
private $fees;
/**
* Map of feeType => fee
* @var array
*/
private $feeMap = null;
/**
* Constructor
*/
public function __construct(Category $category = null)
{
if (!is_null($category)) {
$this->name = $category->name;
$this->setFees($category->fees);
} else {
$this->fees = array();
}
}
/**
* Set name
*
* @param string $name
* @return Category
* @throws \InvalidArgumentException
*/
public function setName($name)
{
if (is_null($name) || empty($name = trim($name))) {
return \InvalidArgumentException('Empty category name');
}
$this->name = $name;
return $this;
}
/**
* Get name
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Set version
*
* @param integer $version
* @return Category
*/
public function setVersion($version)
{
$this->version = $version;
return $this;
}
/**
* Get version
*
* @return integer
*/
public function getVersion()
{
return $this->version;
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* Sets an array of fees to the category.
*
* @param array $fees
* @return Category
*/
public function setFees(array $fees) {
$this->fees = array();
$this->feeMap = array();
foreach ($fees as $fee) {
$this->addFee($fee);
}
return $this;
}
/**
* Add fee to category. Only one fee per fee type allowed.
*
* @param Fee $fee
* @return Category
*/
public function addFee(Fee $fee)
{
if (!$fee->isValid()) throw new \InvalidArgumentException('Invalid fee added to category');
$feeMap = $this->getFeeMap();
if (key_exists($fee->getType()->getName(),$feeMap)) {
throw new \InvalidArgumentException('Multiple fee type [' . $fee->getType()->getName() . '] specified for category [' . $this->name . ']');
}
$this->fees[] = $fee;
$this->feeMap[$fee->getType()->getName()] = $fee;
return $this;
}
/**
* Remove fee
*
* @param Fee $fee
* @return Category
*/
public function removeFee(Fee $fee)
{
$this->fees->removeElement($fee);
return $this;
}
/**
* Get fees
*
* @return Fee[]
*/
public function getFees()
{
return $this->fees;
}
/**
* Get fee of given type. Returns null if type is not present.
*
* @return Fee
*/
public function getFee(FeeType $type)
{
$feeMap = $this->getFeeMap();
if (key_exists($type->getName(),$feeMap)) return $feeMap[$type->getName()];
return null;
}
private function getFeeMap() {
if (is_null($this->feeMap)) {
$this->feeMap = array();
foreach ($this->fees as $fee) $this->feeMap[$fee->getType()->getName()] = $fee;
}
return $this->feeMap;
}
/**
* Returns whether a category is considered valid.
* @return boolean
*/
public function isValid() {
if (empty($this->name)) return false;
if (empty($this->fees)) return false;
return true;
}
}
当我访问网站并访问上面的代码时,Symfony会显示以下消息:
Circular reference detected for service "App\HTSC\Entity\Finance\Subscription\Category",path: "App\HTSC\Entity\Finance\Subscription\Category -> App\HTSC\Entity\Finance\Subscription\Category".
通常,当检测到循环依赖时,将涉及第二类。就我而言,这是类本身之间的循环依赖吗?
我还检查了使用此类的其他类,但无法在任何地方确定与此类的循环依赖。
有人遇到过同样的问题,并且知道解决方案吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)