如何在没有Symfony 4中的DoctrineBundle的情况下将DBAL Doctrine连接注册为服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在没有Symfony 4中的DoctrineBundle的情况下将DBAL Doctrine连接注册为服务相关的知识,希望对你有一定的参考价值。
我正在尝试仅将Doctrine DBAL Connection组件注册为Symfony4中的服务。 我不需要完整的DoctrineBundle symfony产品,而只需要提供基本数据库抽象级别的部分。 现在我一直在努力弄清楚如何实现作曲家作为服务下载的原始库。 这是应该如何创建Connection类,如官方文档:
<?php
$config = new DoctrineDBALConfiguration();
//..
$connectionParams = array(
'dbname' => 'mydb',
'user' => 'user',
'password' => 'secret',
'host' => 'localhost',
'driver' => 'pdo_mysql',
);
$conn = DoctrineDBALDriverManager::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
DoctrineDBALConfiguration:
DoctrineDBALConnection:
factory: 'DoctrineDBALDriverManager::getConnection'
arguments:
-
url : '%env(DB_URL)%'
driverOptions: {20: false} # emulate prepared statements
- '@DoctrineDBALConfiguration'
# DefaultController.php
use DoctrineDBALConnection;
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
config/services.yamlDATABASE_URL = MySQL的://用户:密码@本地/ DBNAME
AppServiceConexion:
arguments:
-
url : '%env(DATABASE_URL)%'
in AppService folder -> Conexion.php
Use DoctrineDBALConfiguration;
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 = DoctrineDBALDriverManager::getConnection($connectionParams, $config);
return $conn;
}
in AppEntity folder -> BaseService.php
class BaseService
{
protected $db;
public function __construct($db)
{
$this->db = $db->getConexion();
}
}
socios Entity in AppEntity -> Socios.php
namespace AppEntity;
class Socios extends BaseService
{
public function veo(){
return $this->db->fetchAll("select * from socios order by id;");
}
}
Finally in AppController -> SociosController.php
use SymfonyBundleFrameworkBundleControllerController;
use SymfonyComponentRoutingAnnotationRoute;
use AppServiceConexion;
use AppEntitySocios;
class SociosController extends Controller
{
public function Socios(Conexion $conn)
{
$socios = (new Socios($conn))->getAll();
return $this->render('Socios/index.html.twig', array(
'socios' => $socios,
));
}
}
以上是关于如何在没有Symfony 4中的DoctrineBundle的情况下将DBAL Doctrine连接注册为服务的主要内容,如果未能解决你的问题,请参考以下文章
如何将令牌存储作为参数传递给 Symfony 3.4 中的事件监听器
在 Symfony 4.4 中覆盖复选框表单字段产生重复标签且没有字段