web-dev-qa-db-ja.com

Doctrine orm EntityManagerでsilexを使用する方法は?

Silexフレームワークは初めてです。そして、doctrineエンティティマネージャーを使用して簡単なSQLDB接続を行いたいと思います。簡単な例をいくつか挙げてください。

前もって感謝します、
SK

16
KSK

以下は、以下のすべてのセットアップの 実例 です。 YouTubeチュートリアル その設定を説明するものもあります。または、今すぐ機能するものが必要な場合は、 this を試してください。

それ以外の場合、以下はセットアップの1つの方法を説明する試みであり、 "use silex with Doctrine orm EntityManager"

インストール

この行をcomposer.jsonに追加します。

"dflydev/doctrine-orm-service-provider": "1.0.6"

コマンドラインから実行:

~$ composer update dflydev/doctrine-orm-service-provider

登録

サービスプロバイダーを登録します。

$app->register(new Silex\Provider\DoctrineServiceProvider());
$app->register(new Dflydev\Silex\Provider\DoctrineOrm\DoctrineOrmServiceProvider());

構成、設定

データベースとエンティティのマッピングを構成します。 パスが異なる場合があります。より適切で詳細な説明は Doctrine ORM Service Provider README :にあります。

$app['db.options'] = array(
    'driver'   => 'pdo_mysql',
    'charset'  => 'utf8',
    'Host'     => '127.0.0.1',
    'dbname'   => '',
    'user'     => '',
    'password' => '',
);

$app['orm.proxies_dir'] = __DIR__.'/../cache/doctrine/proxies';
$app['orm.default_cache'] = 'array';
$app['orm.em.options'] = array(
    'mappings' => array(
        array(
            'type' => 'annotation',
            'path' => __DIR__.'/../../src',
            'namespace' => 'My\\Namespace\\To\\Entity',
        ),
    ),
);

詳細については、cli-config.phpを設定することをお勧めします Doctrine Configuration Documentation

<?php
    // http://docs.doctrine-project.org/en/latest/reference/configuration.html
    require __DIR__.'/vendor/autoload.php';
    require __DIR__.'/path/to/app/config.php';
    $newDefaultAnnotationDrivers = array(
        __DIR__."/src/MyNamespace",
    );
    $config = new \Doctrine\ORM\Configuration();
    $config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ApcCache);
    $driverImpl = $config->newDefaultAnnotationDriver($newDefaultAnnotationDrivers);
    $config->setMetadataDriverImpl($driverImpl);
    $config->setProxyDir($app['orm.proxies_dir']);
    $config->setProxyNamespace('Proxies');
    $em = \Doctrine\ORM\EntityManager::create($app['db.options'], $config);
    $helpers = new Symfony\Component\Console\Helper\HelperSet(array(
        'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()),
        'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em),
    ));

試してみてください

この時点で、$newDefaultAnnotationDriversパスに 注釈付きエンティティ があると仮定して、コマンドラインからスキーマをダンプできるはずです。

~$ php vendor/bin/doctrine orm:schema-tool:update --dump-sql

上記の設定を行うと、コントローラーメソッドから$app['orm.em']を使用できるようになります。

$app->match('/form', function (Request $request) use ($app) {

    $em = $app['orm.em'];

    $entity = new \My\Namespace\To\Entity\Form();

    $form = $app['form.factory']->create(new \My\Namespace\To\Form\FormType(), $entity);

    $form->handleRequest($request);

    if ($form->isValid()) {
        $em->persist($entity);
        $em->flush();
    }

    return new Response($app['twig']->render('form.html.twig', array(
        'form' => $form->createView(),
    )));

})->bind('form');
16
ooXei1sh

公式のDoctrine DBALのみのSilex用のORMサービスプロバイダーはありませんが、いくつかの サードパーティのサービスプロバイダー を試すことができます。
私は dflydev-doctrine-orm-service-provider を使用して見つめました。これは、githubで最も多く開始され、見栄えがします。

4
olanod