我将开始说我正在使用 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
}
}
您可能会注意到,我还有一个请求数据转换器对象,下面是它的代码片段:
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
匹配的 a时,应该将App\Entity\Cases
一个名为的新属性附加到我的对象,但在我的场景中没有发生,我不确定为什么或我错过了什么。case
$request
在我的 DTO的这一行调试和设置断点时$this->param = (int) $data['param'];
,如果我打印出来,$this->attributes
我会得到以下输出:
Symfony\Component\HttpFoundation\ParameterBag::__set_state(array(
'parameters' =>
array (
),
))
我在这里缺少什么?我的方法有什么问题?