【问题标题】:How to use silex with Doctrine orm EntityManager?如何将 Silex 与 Doctrine orm EntityManager 一起使用?
【发布时间】:2013-04-08 09:56:36
【问题描述】:

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

提前致谢,
SK

【问题讨论】:

    标签: doctrine-orm entitymanager silex


    【解决方案1】:

    这是下面所有设置的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),
        ));
    

    试一试

    此时,假设您在$newDefaultAnnotationDrivers 路径中有annotated entities,您应该能够从命令行转储一些架构:

    ~$ 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');
    

    【讨论】:

    • cli-config.php 是棘手的部分,您的回答很有帮助,谢谢。
    • 请注意,$config-&gt;newDefaultAnnotationDriver($newDefaultAnnotationDrivers); 还接受第二个布尔参数(使用简单的注释?)。这可能会让您对No Metada Classes to process. 感到头疼。
    • "dflydev/doctrine-orm-service-provider": "^2.0" - 这是我的工作版本。
    【解决方案2】:

    Silex 没有官方的 Doctrine ORM 服务提供商,只有 DBAL,但有几个 third party service providers 可以尝试。
    我盯着dflydev-doctrine-orm-service-provider 看,它在 github 中启动次数最多,看起来不错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 2014-08-27
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      相关资源
      最近更新 更多