Являюсь новым в рамках Silex. И я хотел бы сделать простое соединение SQL DB с помощью администратора сущности доктрины. Просьба дать несколько простых примеров.
Спасибо, Advance,
SK
Являюсь новым в рамках Silex. И я хотел бы сделать простое соединение SQL DB с помощью администратора сущности доктрины. Просьба дать несколько простых примеров.
Спасибо, Advance,
SK
Ниже приведен рабочий рабочий пример следующей ниже. Существует также учебник YouTube, объясняющий эту настройку. Или, если вы просто хотите что-то, что работает прямо сейчас, попробуйте: this.
В противном случае мы попытаемся объяснить один способ настройки и "использовать силекс с помощью Doctrine orm EntityManager:
Добавьте эту строку в композитор .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());
Настройте сопоставления базы данных и сущностей. Ваши пути могут отличаться. Более подробное объяснение можно найти в README поставщика услуг 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',
),
),
);
Вероятно, вам нужно настроить 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');
У официального поставщика Doctrine ORM для Silex нет только DBAL, но есть несколько сторонних поставщиков услуг, которые вы можете попробовать.
Я смотрел с помощью dflydev-doctrine-orm-service-provider, который имеет наибольшее количество запусков в github и выглядит хорошо.