[英]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
配置/ services.yamlDATABASE_URL = MySQL的://用戶:密碼@本地/ DBNAME
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.