如何在新项目symfony中集成settings.yml?

doinxwow  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(114)

我创建了一个新项目symfony 6,因为我需要迁移一个旧项目锡莱克斯。
我从来没有与symfony工作.这是一个项目,使用控制台命令,基本上,与示例备份,迁移和恢复工作.我有一个这样的文件:

global:
  db.host: 57
  db.port: ''
  db.user: www
  db.password: www
  db.charset: www
  hostname: host
  trigram: www
  dev: 0
  username.autofill: true
  timeout: 25000

我需要在所有命令中使用这些信息。我如何正确地做到这一点?
我看到我可以把它放在services.yml -〉parameters中。我不知道我如何在命令类中访问这些信息。
有人能帮我吗

2ledvvac

2ledvvac1#

将参数放入services.yaml中。

parameters:
    db.host: 57
    db.port: ''
    db.user: www
    db.password: www
    db.charset: www
    hostname: host
    trigram: www
    dev: 0
    username.autofill: true
    timeout: 25000

然后,在任何类中,您都可以访问 ParameterBagInterface。例如:

namespace App\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;

class MyCustomCommand extends Command
{
    protected $params;

    public function __construct(ParameterBagInterface $params)
    {
        $this->params = $params;
    }

    public function getDbHost(): int
    {
        $dbHost = $this->params->get('db.host');

        return $dbHost; // 57
    }
}
u5rb5r59

u5rb5r592#

在这种情况下,可以在config/services.yaml中使用

parameters:
    db.host: '%env(DB_HOST)%'
    db.port: '%env(DB_PORT)%'
    ..... etc.

在这种情况下,参数不会给予你一个连接类,所以,你需要在config/services.yaml中创建一个连接类:

App\Connection\PDOWrapper:
        class: App\Connection\PDOWrapper
        arguments:
            - '%db.host%'
            - '%db.port%'

src/Connection/PDOWrapper.php

<?php
namespace App\Connection;

use PDO;

class PDOWrapper
{
    /** @var PDO */
    private $pdo;

    public function __construct(
        $user,
        $pass,
        $db,
        $connectionName,
        $socketDir = null
    ) {
        $dsn = sprintf(
            'mysql:dbname=%s;%s%s',
            $db,
            $socketDir,
            $connectionName
        );

        $this->pdo = new PDO($dsn, $user, $pass);
        $this->pdo->query(<<<SQL
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
SQL
        );
    }

    /**
     * @return PDO
     */
    public function getPdo(): PDO
    {
        return $this->pdo;
    }
}

这个类是一个关于如何创建PDO连接的例子,然后你可以将这个类注入到你的服务中抛出依赖注入,如果你需要的话,其他的方法是使用多个连接,你可以在这个link中找到文档:
或读取下一个link

相关问题