Symfony 4. InheritanceType(“ JOINED”)和ParamConverter。怪现象

时间:2019-03-14 21:34:09

标签: symfony4

我已经定义了CoreCase类

/**
 * @ORM\Entity(repositoryClass="App\Repository\CoreCaseRepository")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"Diesel" = "DieselCase", "Carloan" = "CarloanCase"})
 * @ORM\HasLifecycleCallbacks()
 * 
 */
abstract class CoreCase 
{
.
.
.
}

和两个DieselCase和Carloan类:

/**
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks()
 */
class DieselCase extends CoreCase
{
.
.
.
}
/**
 * @ORM\Entity(repositoryClass="App\Repository\CarloanCaseRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class CarloanCase extends CoreCase
{
.
.
.
}

在动作中,我正在使用参数转换器

/**
 * @Rest\Get("/case/carloan/{case}", requirements={"case" = "\d+"})
 *
 */
public function getCarloanCase(CarloanCase $case)
{
.
.
.
}

如果我使用现有的CarloanCase(例如/ case / carloan / 201

如果我使用ID为DieselCase的URL调用,我预计会出现404错误,但会出现500错误

“ message”:“传递给App \ Controller \ Api \ Cases \ CarloanController :: getCarloanCase()的参数1必须是App \ Entity \ Cases \ CarloanCase的实例,App \ Entity \ Cases \ DieselCase的实例,在第150行的/home/alexander/projects/lawbutler/vendor/symfony/http-kernel/HttpKernel.php中调用,

但是!!如果我从Carloan注释中删除了(repositoryClass="App\Repository\CarloanCaseRepository"),则它可以正常工作,并且出现预期的404错误。 为什么行为如此奇怪?我该怎么办?

1 个答案:

答案 0 :(得分:0)

我会在这里猜测,尽管我同意这很奇怪。 我注意到您没有DieselCase的自定义存储库来与CarloanCase的存储库并行。 出于某种奇怪的原因,难道是错误地为DieselCase查询选择了CarloanCaseRepository吗?我认为这可以解释500错误的原因,因为您交付的实体类型错误。可以肯定的是,我将在该存储库中放置一些xdebug断点,以了解在这种情况下如何使用它。 另外,我尝试添加自定义/特定的DieselCaseRepository来查看是否可以解决该错误。 (从长远来看,我希望您会希望这样做。