首页 > 解决方案 > Symfony - 如果找不到实体,则添加回调

问题描述

我几天都在为某事苦苦挣扎。我正在使用存储有关食品数据的 API。我想做的是:

  1. 用户正在寻找产品(使用条形码)
  2. 我们在数据库中搜索产品
  3. 如果什么都没有找到,那么我们访问 API 来检索信息并将它们保存在数据库中
  4. 然后我们像往常一样处理加载的实体

如果实体在数据库中不存在,是否有办法(事件或其他)添加行为?

提前致谢

标签: apisymfonyeventsdoctrine

解决方案


未经测试的代码来说明流程。

在您的存储库中:

public function findByEAN(string $ean): Product
{
    $product = $this->findOnyBy(['ean' => $ean]);
    if ($product === null) {
        throw new EntityNotFoundException(sprintf('No Product with EAN %s', $ean);
    }

    return $product;
}

在您的控制器操作中:

try {
    $product = $this->getEntityManager()->getRepository(Product::class)->findByEan($request->get('ean'));
} catch (EntityNotFoundException $e) {
    $product = '' ; // fetch product via api and store in DB
}

return $product;

推荐阅读