Как можно через dotenv выбрать другой путь к сущности с одинаковым именем сущности.
Изначально у нас в Symfony 3 было приложение для встреч людей на мероприятиях нашей организации. Тогда мы решили предложить это приложение нашим партнерам.
Один из партнеров попросил нас настроить приложение для них со своими данными и спецификациями. Мы в основном создали новый экземпляр приложения Symfony с копией таблиц базы данных (с другим префиксом), изменениями в сущностях для отображения новых имен таблиц БД и некоторыми изменениями в тексте перевода.
Похоже, что другие партнеры будут следовать этой тенденции индивидуальных экземпляров.
Поэтому я пытаюсь обновить основное приложение до Symfony 4 и пытаюсь использовать несколько Entity Manager и dotenv для разграничения таблиц базы данных партнеров, как описано ниже.
В двух словах, я пытаюсь использовать несколько Entity Manager для переключения имен таблиц БД по префиксу.
.env
###> doctrine/doctrine-bundle ###
# Format described at http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# Configure your db driver and server_version in config/packages/doctrine.yaml
DATABASE_URL=oci8://user:pass@127.0.0.1:1521/XE
EM_TYPE=OpenAccess
###< doctrine/doctrine-bundle ###
Только в security.yaml работает env хорошо
security:
encoders:
App\Entity\%env(EM_TYPE)%\Osoba:
providers:
our_db_provider:
entity:
class: App\Entity\%env(EM_TYPE)%\Osoba
property: username
Когда я пытался получить% env (EM_TYPE)% в default_entity_manager, выдавал ошибку Вы запросили несуществующую службу "doctrine.orm.% Env (EM_TYPE)% _ entity_manager". doctrine.yaml
parameters:
env(DATABASE_URL): ''
doctrine:
dbal:
default_connection: '%env(EM_TYPE)%'
connections:
MeetingTool:
driver: 'oci8'
charset: UTF8
schema_filter: /^MT_/
url: '%env(resolve:DATABASE_URL)%'
OpenAccess:
driver: 'oci8'
charset: UTF8
schema_filter: /^OA6_/
url: '%env(resolve:DATABASE_URL)%'
orm:
auto_generate_proxy_classes: true
default_entity_manager: '%env(EM_TYPE)%'
entity_managers:
MeetingTool:
connection: MeetingTool
mappings:
Main:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/MeetingTool'
prefix: 'App\Entity\MeetingTool'
alias: App2
OpenAccess:
connection: OpenAccess
mappings:
App:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/OpenAccess'
prefix: 'App\Entity\OpenAccess'
alias: OpenAccess
и самая большая проблема - использовать , как я нацеливаюсь на нужную сущность здесь? например loginController.php
<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\OpenAccess\LogPrihlaseni;
//use App\Entity\MeetingTool\LogPrihlaseni;
class LoginController extends AbstractController {
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public function logPrihlaseni() {
$log = new LogPrihlaseni();