Symfony 4. InheritanceType ("JOINED") и ParamConverter. Странное явление - PullRequest
0 голосов
/ 15 марта 2019

Я определил класс 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)
{
.
.
.
}

Это работает для меня, если я вызываю URL, с существующим CarloanCase, например / case / carloan / 201

Если я вызываю URL с идентификатором DieselCase, яожидаю ошибку 404, но я получаю сообщение об ошибке 500 *

: «Аргумент 1, передаваемый в App \ Controller \ Api \ Cases \ CarloanController :: getCarloanCase (), должен быть экземпляром App \ Entity\ Cases \ CarloanCase, данный экземпляр приложения \ Entity \ Cases \ DieselCase, вызывается в /home/alexander/projects/lawbutler/vendor/symfony/http-kernel/HttpKernel.php в строке 150 ",

НО! Если я удаляю (repositoryClass="App\Repository\CarloanCaseRepository") из аннотации Carloan, она работает правильно, и я получаю ожидаемую ошибку 404.Почему поведение так странно?Что я могу сделать?

1 Ответ

0 голосов
/ 11 мая 2019

Я сделаю предположение здесь, хотя я согласен, что это странно.Я заметил, что у вас нет собственного хранилища для DieselCase, параллельного хранилищу для CarloanCase.Может ли быть так, что по какой-то странной причине CarloanCaseRepository выбирается по ошибке для запроса DieselCase?Я думаю, что это объясняет причину ошибки 500 в том, что вы получаете неправильный тип сущности.Чтобы быть уверенным, я бы поставил несколько точек останова xdebug в этом репо, чтобы посмотреть, как он используется в таких обстоятельствах.Кроме того, я бы попробовал добавить пользовательский / определенный DieselCaseRepository, чтобы посмотреть, исправит ли это ошибку.(Я ожидаю, что вы все равно захотите это в долгосрочной перспективе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...