检查实体属性是否存在

时间:2018-05-31 09:31:11

标签: symfony doctrine symfony4

我有一个类似example.org/overview/<column>/<value>的网址(例如: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;

    [...]

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

2 个答案:

答案 0 :(得分:6)

您可以像这样使用getClassMetadata:

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

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

您还可以尝试:getFieldNames代替getColumnNames

答案 1 :(得分:1)

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

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

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