Я начну говорить, что я использую Symfony 4.3.4 и Api Platform (теперь называется AP).Сказав, что так выглядит мой пользовательский контроллер (используемый для AP):
declare(strict_types=1);
namespace App\Controller\CaseWork\Pend;
use App\Request\PendCaseRequest;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
use Symfony\Component\Routing\Annotation\Route;
class PendCaseController
{
/**
* @Route("/myroute/{id}/pend", name="routeName")
* @ParamConverter("case", class="App\Entity\Cases")
*/
public function __invoke(PendCaseRequest $request, int $id)
{
// do something with the $request
}
}
Как вы можете заметить, у меня также есть объект Data Data Transformer, и вот фрагмент кода для него:
declare(strict_types=1);
namespace App\Request;
use App\Interfaces\RequestDTOInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Validator\Constraints as Assert;
class PendCaseRequest implements RequestDTOInterface
{
/**
* @var int
*
* @Assert\NotBlank()
* @Assert\NotNull()
* @Assert\Type("integer")
*/
private $param;
public function __construct(Request $request)
{
$data = json_decode($request->getContent(), true);
$this->param = (int) $data['param'];
// ...
}
}
Предполагается (согласно документам здесь ), что, когда поступит запрос и найден id
, соответствующий App\Entity\Cases
, новый атрибут с именем case
должен быть добавлен к моему $request
объект, но в моем сценарии не происходит, и я не уверен, почему или чего мне не хватает.
При отладке и установке точки останова на этой строке $this->param = (int) $data['param'];
в моем DTO, если я распечатаю $this->attributes
, я получаю следующий вывод:
Symfony\Component\HttpFoundation\ParameterBag::__set_state(array(
'parameters' =>
array (
),
))
Чего мне здесь не хватает?Что не так с моим подходом?