控制器检查要求以处理操作

Controller check requirements to process action

我想弄清楚是否可以在处理控制器操作之前检查需求。在 Nette 中有 checkRequirementsonStartupbeforeRender 等方法,我可以在其中检查。

我有 api 资源 album/{albumId}/song/ 并且每次对我的 SongController[=30= 进行任何操作时,我想检查给定 id 的专辑是否存在] 被处理并且 return 404 状态码 如果没有。

到目前为止,我发现 this article in Symfony documentation 没有像 preExecutepostExecute 这样的方法。但是我想有 bundle 或类似的东西来添加这些方法 。我认为创建新的 class 仅在一个控制器中使用它没有意义。

还有其他选择吗?

ParamConverter 这样做。它使用路由提供的 ID 查找实体并抛出异常,如果没有找到任何内容,则返回 404。

// paramConverter requires that you type-hint a class, which is a best practice anyway :)
public function getArtist(\Appbundle\Entity\Song $song)
{
    //...
}