检查实体属性是否存在

Mic*_*hon 5 doctrine symfony symfony4

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

    [...]
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*eri 8

您可以像这样使用getClassMetadata:

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

if (in_array($property, $columns)) {
   //property exists, code here
}
Run Code Online (Sandbox Code Playgroud)

您也可以尝试:getFieldNames代替getColumnNames


Gau*_*ier 8

亚历山德罗是对的,但hasField()存在确切的方法:

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

if ($metaCar->hasField('foo')) {
   //property exists
}
Run Code Online (Sandbox Code Playgroud)