检查实体 属性 是否存在

Check if entity property exists

我有一个像 example.org/overview/<column>/<value> 这样的 URL(示例:example.org/overview/color/red),它会导致在列 "color" 中搜索值 "red"。这是实体:

<?php
namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

// @ORM\Entity(repositoryClass="App\Repository\CarRepository")
class Car
{
    // @ORM\Column(type="string", length=255)
    private $name;
    private $color;

    [...]

我想我应该在开始数据库查询之前检查实体 属性 是否存在。如果 foo 是有效的数据库列(= 实体 属性),我如何检查何时有人调用 example.org/overview/foo/bar? Symfony 在这里提供了一个简单的解决方案吗?如果情况并非如此,我认为我必须使用硬编码白名单。

您可以像这样使用 getClassMetadata:

$columns = $em->getClassMetadata(Car::class)->getColumnNames();

if (in_array($property, $columns)) {
   //property exists, code here
}

您也可以尝试:getFieldNames 而不是 getColumnNames

是正确的,但确切的方法 hasField() 存在:

$metaCar = $em->getClassMetadata(Car::class)

if ($metaCar->hasField('foo')) {
   //property exists
}