我有一个类似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在这里提供简单的解决方案吗?如果情况不是这样,我想我必须使用硬编码的白名单。
答案 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
}