Symfony 4. InheritanceType("JOINED") 和 ParamConverter。奇怪的现象

2024-04-18

我已经定义了 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 
{
.
.
.
}

以及两类柴油箱和汽车贷款:

/**
 * @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 调用 URL,它对我有用,例如 /case/carloan/201

如果我使用 DieselCase id 调用 URL,我预计会出现 404 错误,但收到 500 错误

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

BUT!如果我删除(repositoryClass="App\Repository\CarloanCaseRepository")从 Carloan 注释来看,它工作正常,并且我得到了预期的 404 错误。 为什么行为如此奇怪?我能做些什么?


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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Symfony 4. InheritanceType("JOINED") 和 ParamConverter。奇怪的现象 的相关文章

随机推荐