簡體   English   中英

如何在沒有Symfony 4中的DoctrineBundle的情況下將DBAL Doctrine連接注冊為服務

[英]How to register the DBAL Doctrine connection as a service without the DoctrineBundle in Symfony 4


我正在嘗試僅將Doctrine DBAL Connection組件注冊為Symfony4中的服務。
我不需要完整的DoctrineBundle symfony產品,而只需要提供基本數據庫抽象級別的部分。
現在我一直在努力弄清楚如何實現作曲家作為服務下載的原始庫。
這是應該如何創建Connection類,如官方文檔:

<?php
$config = new \Doctrine\DBAL\Configuration();
//..
$connectionParams = array(
    'dbname' => 'mydb',
    'user' => 'user',
    'password' => 'secret',
    'host' => 'localhost',
    'driver' => 'pdo_mysql',
);
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);

如果可能,如何在service.yml配置中配置此類服務?
如果不是,我該怎么辦?

您可能最好只使用doctrine包並從配置文件中刪除orm部分。 實際上並沒有增加太多開銷,而且更容易自己做。

話雖如此,這里是最小dbal設置的細節

composer create symfony/skeleton s40dbal
cd s40dbal
composer require server
composer require doctrine/dbal

# .env
DB_URL=mysql://user:password@localhost/dbname

# config/services.yaml
Doctrine\DBAL\Configuration:

Doctrine\DBAL\Connection:
    factory: 'Doctrine\DBAL\DriverManager::getConnection'
    arguments:
        -
            url : '%env(DB_URL)%'
            driverOptions: {20: false} # emulate prepared statements
        - '@Doctrine\DBAL\Configuration'

# DefaultController.php
use Doctrine\DBAL\Connection;
class DefaultController
{
    public function index(Connection $conn)
    {
        $stmt = $conn->prepare('SELECT id,name FROM users WHERE username = ?');
        $stmt->execute(['someuser']);
        $row = $stmt->fetch();
        var_dump($row);

        return new Response('dbal');
    }
}

請享用

只需2美分。

composer create symfony/skeleton super-project

cd super-project

composer require doctrine/dbal
.ENV

DATABASE_URL = MySQL的://用戶:密碼@本地/ DBNAME

配置/ services.yaml
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Routing\Annotation\Route;
use App\Service\Conexion;
use App\Entity\Socios;

class SociosController extends Controller
{
    public function Socios(Conexion $conn)
    {
        $socios = (new Socios($conn))->getAll();
        return $this->render('Socios/index.html.twig', array(
        'socios' => $socios,
         ));
    }
}
在App \\ Service文件夾中 - > Conexion.php
 Use Doctrine\\DBAL\\Configuration; class Conexion { var $url = ''; public function __construct($url) { $this->url = $url['url']; } public function getConexion(){ // configuration parameters $config = new Configuration(); $connectionParams = array( 'url' => $this->url, ); $conn = \\Doctrine\\DBAL\\DriverManager::getConnection($connectionParams, $config); return $conn; } 
在App \\ Entity文件夾 - > BaseService.php中
 class BaseService { protected $db; public function __construct($db) { $this->db = $db->getConexion(); } } 
App \\ Entity中的socios實體 - > Socios.php
 namespace App\\Entity; class Socios extends BaseService { public function veo(){ return $this->db->fetchAll("select * from socios order by id;"); } } 
最后在App \\ Controller - > SociosController.php中
 use Symfony\\Bundle\\FrameworkBundle\\Controller\\Controller; use Symfony\\Component\\Routing\\Annotation\\Route; use App\\Service\\Conexion; use App\\Entity\\Socios; class SociosController extends Controller { public function Socios(Conexion $conn) { $socios = (new Socios($conn))->getAll(); return $this->render('Socios/index.html.twig', array( 'socios' => $socios, )); } } 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM