我无法正确使用 Doctrine 存储库

I cannot correctly use Doctrine repository

好的,我知道这个标题可能太笼统了,但我会尽量在这里描述得更好。

我正在学习 Symfony(完全是 Symfony 的菜鸟),我正在尝试使我的第一个 POST 端点具有存储值到数据库。目前一切正常,除了将数据持久化到数据库。

我创建了实体账户。

/**
 * @ORM\Entity(repositoryClass="App\Account\Infrastructure\Repository\Doctrine\DoctrineAccountRepository")
 * @ORM\Table(name="accounts", indexes={@ORM\Index(name="accounts_id", columns={"id"})})
 */
class Account
{
    use UniqueIdentifierTrait;

    /**
     * @var \App\Account\Infrastructure\Entity\Doctrine\Email
     * @ORM\OneToOne(targetEntity="App\Account\Infrastructure\Entity\Doctrine\Email", cascade={"persist"})
     * @ORM\JoinColumn(referencedColumnName="id", nullable=false, unique=true, onDelete="CASCADE")
     */
    private Email $email;

    /**
     * @var \App\Account\Infrastructure\Entity\Doctrine\Credentials
     * @ORM\OneToOne(targetEntity="App\Account\Infrastructure\Entity\Doctrine\Credentials", cascade={"persist"})
     * @ORM\JoinColumn(referencedColumnName="id", nullable=false, unique=true, onDelete="CASCADE")
     */
    private Credentials $credentials;

    /**
     * @param \App\Account\Core\ValueObject\Uuid $id
     * @param \App\Account\Infrastructure\Entity\Doctrine\Email $email
     * @param \App\Account\Infrastructure\Entity\Doctrine\Credentials $credentials
     */
    public function __construct(Uuid $id, Email $email, Credentials $credentials)
    {
        $this->id = $id;
        $this->email = $email;
        $this->credentials = $credentials;
    }
}

我也有它的存储库

class DoctrineAccountRepository extends ServiceEntityRepository
{
    /**
     * @param \App\Account\Infrastructure\Entity\Doctrine\Account $account
     * @return void
     * @throws \App\Internal\Infrastructure\Exception\SaveException
     */
    public function save(Account $account): void
    {
        try {
            $this->getEntityManager()->persist($account);

            $this->getEntityManager()->flush();
        } catch (ORMException $e) {
            throw new SaveException($e->getMessage());
        }
    }
}

我有服务配置:

services:
  _defaults:
    autowire: true
    autoconfigure: true

  App\Account\Infrastructure\Repository\Doctrine\DoctrineAccountRepository:
    arguments:
      - '@Doctrine\Common\Persistence\ManagerRegistry'
      - App\Account\Infrastructure\Entity\Doctrine\Account

我认为我绑定正确,但由于在 Postman 中发送请求,我得到 PDOException: could not find driver. 由于 $em->flush();

抛出异常

这对我来说很奇怪,因为我的迁移已成功执行,因此应用程序与数据库建立了连接。

学说配置

doctrine:
    dbal:
        driver: '%env(resolve:DATABASE_DRIVER)%' # <-- pdo_sqlsrv
        host: '%env(resolve:DATABASE_HOST)%'
        port: '%env(resolve:DATABASE_PORT)%'
        user: '%env(resolve:DATABASE_USER)%'
        password: '%env(resolve:DATABASE_PASSWORD)%'
        dbname: '%env(resolve:DATABASE_NAME)%'
        charset: '%env(resolve:DATABASE_CHARSET)%'

``

迁移通常 运行 来自命令行,而 Web 请求 运行 通过 php-fpm 或一些 cgi 模块,两者可能有非常不同的 php.ini他们加载的文件,因此允许 php cli 由于加载的驱动程序而工作得很好,而服务器请求由于缺少驱动程序而失败的情况。修复显然是在相关 php ini 文件中启用驱动程序。

phpinfo()(显然在 php 中)会在顶部某处提及加载的 ini 文件。例如在我的服务器上输出可能是 (request):

而 cli 输出: