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