如何检查 Doctrine 中是否需要字段?

How to check if field is required in Doctrine?

我想根据通过 HTTP POST 方式传递的数据创建并保存一个实体。

我如何从实体中获取所有必需的字段,以便我的 REST API 方法可以检查是否所有必需的数据都已通过 HTTP POST 传递(以完成新创建的实体),如果缺少任何内容(例如 "There are missing fields which are required: "title", "message"...)?

一种方法是 Symfony 2 的验证,如评论中提到的 Carlos Granados。可能是更清洁的解决方案。

无论如何,回答这个问题:你可以使用 Doctrines ClassMetadata 来检查一个字段是否可以为空:

$metadata = $entityManager->getClassMetadata('My\Entity\Class');
$isRequired = !$metadata->isNullable("myField");

并将其放入循环中以获取所有必填字段:

$metadata = $em->getClassMetadata('Application\Entity\Task');
$fieldNames = $metadata->getFieldNames();
$required = array();
foreach ($fieldNames as $fieldName) {
    if(!$metadata->isNullable($fieldName)) {
        $required[] = $fieldName;
    }
}