检查实体 属性 是否存在
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
}
我有一个像 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
}