Проверить, существует ли свойство сущности

У меня есть URL-адрес типа example.org/overview/<column>/<value> (пример: 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;

    [...]

Я думаю, я должен проверить, существует ли свойство объекта, прежде чем я начну запрос к базе данных. Как я могу проверить, когда кто-то вызывает example.org/overview/foo/bar, является ли foo допустимым столбцом db (= свойством объекта)? Предлагает ли Symfony здесь простое решение? Если это может быть не так, я думаю, мне нужно использовать жесткий белый список.

В php есть функция property_exists.

fxbt 31.05.2018 11:35
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
7
1
3 632
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

вы можете использовать getClassMetadata следующим образом:

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

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

Вы также можете попробовать: getFieldNames вместо getColumnNames

Рад помочь вам @Michon

Alessandro Minoccheri 31.05.2018 12:08

Алессандро прав, но точный метод hasField() существует:

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

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

Другие вопросы по теме