2017-12-03 7 views
1


私はSymfony4のサービスとしてDoctrine DBAL Connectionコンポーネントのみを登録しようとしています。
私はDoctrineBundle symfonyのオファーを完全には必要としませんが、基本的なデータベース抽象化レベルを提供する部分のみを必要とします。
私は、作曲家によってダウンロードされた生のライブラリをサービスとして実装する方法を考え出すことに取り残されています。
これは、公式ドキュメントなどから、Connectionクラスを作成する方法です。
Symfony 4のDoctrineBundleなしでDBAL Doctrine接続を登録する方法

<?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構成でこのタイプのサービスを設定しますか。
そうでない場合、どうすればいいですか?

+0

ファクトリを使用し、設定パラメータ(https://symfony.com/doc/cu)を使用する接続パラメータと接続を受け入れる工場出荷時のサービスが必要ですrrent/service_container/factories.html)。 –

答えて

2

doctrineバンドルを使用し、設定ファイルからormセクションを削除する方がよい場合があります。実際にオーバーヘッドを増やすことはなく、自分でやる方が簡単です。

は、ここでは、最小限のDBALセットアップ

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

# .env 
DB_URL=mysql://user:[email protected]/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'); 
    } 
} 

の詳細は

0

ちょうど私の2セントをお楽しみいただけます、と述べました。

composer create symfony/skeleton super-project 

cd super-project

composer require doctrine/dbal 
.env

DATABASE_URL =のmysql://ユーザー:パスワード@ localhostの/ dbnameは

のconfig/services.yaml
App\Service\Conexion: 
    arguments: 
      - 
       url : '%env(DATABASE_URL)%' 
で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 \エンティティフォルダに - >アプリケーション\エンティティでBaseService.php
class BaseService 
{ 
    protected $db; 
    public function __construct($db) 
    { 
     $this->db = $db->getConexion(); 
    } 
} 
sociosエンティティ - > Socios.phpのApp \コントローラーで最後に
namespace App\Entity; 

class Socios extends BaseService 
{ 
    public function veo(){ 
     return $this->db->fetchAll("select * from socios order by id;"); 
    } 
} 
- > 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, 
     )); 
    } 
} 
関連する問題