如何在Doctrine orm EntityManager中使用silex?

KSK*_*KSK 16 entitymanager doctrine-orm silex

是Silex框架的新手.我想使用doctrine实体管理器进行简单的SQL DB连接.请举一些简单的例子.

在此先感谢
SK

ooX*_*1sh 16

以下是以下所有设置的工作示例.还有一个YouTube教程解释了这个设置.或者,如果您只是想要现在可以使用的东西,请尝试:这个.

否则,以下是尝试解释一种设置和"使用Docx orm EntityManager使用silex"的方法:

安装

将此行添加到composer.json中:

"dflydev/doctrine-orm-service-provider": "1.0.6"
Run Code Online (Sandbox Code Playgroud)

从命令行运行:

~$ composer update dflydev/doctrine-orm-service-provider
Run Code Online (Sandbox Code Playgroud)

寄存器

注册服务提供商:

$app->register(new Silex\Provider\DoctrineServiceProvider());
$app->register(new Dflydev\Silex\Provider\DoctrineOrm\DoctrineOrmServiceProvider());
Run Code Online (Sandbox Code Playgroud)

配置

配置数据库和实体映射.你的路径可能不同.可以在Doctrine ORM服务提供商自述文件中找到更好,更详细的解释:

$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',
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

您可能需要设置cli-config.php更多信息,请阅读Doctrine配置文档:

<?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),
    ));
Run Code Online (Sandbox Code Playgroud)

拿它旋转

此时,您应该能够从命令行转储一些模式,假设您在路径中有注释 实体$newDefaultAnnotationDrivers:

~$ php vendor/bin/doctrine orm:schema-tool:update --dump-sql
Run Code Online (Sandbox Code Playgroud)

完成上述设置后,您还应该能够使用$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');
Run Code Online (Sandbox Code Playgroud)

  • 注意`$ config-> newDefaultAnnotationDriver($ newDefaultAnnotationDrivers);`还需要第二个布尔参数(使用简单的注释?).它可能会导致你"没有Metada课程来处理.头痛. (3认同)
  • cli-config.php是棘手的部分,你的答案很有帮助,谢谢. (2认同)

ola*_*nod 4

Silex 没有官方的 Doctrine ORM 服务提供商,只有 DBAL,但是您可以尝试几个第三方服务提供商
我开始使用dflydev-doctrine-orm-service-provider,它在 github 中启动次数最多,而且看起来不错。