我是 Silex 框架的新手。我想使用学说实体管理器进行简单的 SQL DB 连接。请举一些简单的例子。
提前致谢,
SK
以下是以下所有设置的工作示例。还有一个YouTube 教程解释了该设置。或者,如果您只是想要现在可以使用的东西,请尝试: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 配置文档:
<?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');
Silex 没有官方的 Doctrine ORM 服务提供商,只有 DBAL,但是您可以尝试几个第三方服务提供商。
我盯着dflydev-doctrine-orm-service-provider看,它在 github 中有最多的开始并且看起来不错。