doctrine-orm - 如何将 silex 与 Doctrine orm EntityManager 一起使用?

标签 doctrine-orm entitymanager silex

我是 Silex 框架的新手。我想使用学说实体管理器进行简单的 SQL DB 连接。请举几个简单的例子。

提前致谢,
SK

最佳答案

这是一个 working example以下所有设置。还有一个YouTube tutorial解释那个设置。或者,如果您只想要现在可以使用的东西,请尝试:this .

否则,以下尝试解释一种设置方法和 “将 silex 与 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),
    ));

试一试

此时,假设您有 annotated,您应该能够从命令行转储一些模式。 entities$newDefaultAnnotationDrivers小路:
~$ php vendor/bin/doctrine orm:schema-tool:update --dump-sql

完成上述设置后,您还应该可以使用 $app['orm.em']从 Controller 方法:
$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');

关于doctrine-orm - 如何将 silex 与 Doctrine orm EntityManager 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16029527/

相关文章:

symfony - 删除 preUpdate 事件监听器中的实体

symfony - 预期参数类型为 "string",给出 "App\Entity"

java - JPA/EntityManager有没有提供类似于Spring的RowMapper的机制

symfony - Doctrine 和 Symfony : magic methods and caching

php - 如何从 EventManager 模拟对象获取 UnitOfWork 或者如何获取 PHP Unit 中的最后一个持久化对象?

java - 如何持久化每一个新实体?

jpa - 在@ConstructorResult 的情况下放置@SqlResultSetMapping 的位置

PHP Twig : access current template variable from within macro without passing?

php - 在我的自定义类中注入(inject) Silex $app

php - 如何在 Twig 中使用 PHP 模板引擎而不是 Silex 中的 Twig 语法