Вопрос возможно странный, но все же. Имеем конфиг из документации Symfony 4:
doctrine:
dbal:
default_connection: default
connections:
default:
# configure these for your database server
url: '%env(DATABASE_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
customer:
# configure these for your database server
url: '%env(DATABASE_CUSTOMER_URL)%'
driver: 'pdo_mysql'
server_version: '5.7'
charset: utf8mb4
orm:
default_entity_manager: default
entity_managers:
default:
connection: default
mappings:
Main:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Main'
prefix: 'App\Entity\Main'
alias: Main
customer:
connection: customer
mappings:
Customer:
is_bundle: false
type: annotation
dir: '%kernel.project_dir%/src/Entity/Customer'
prefix: 'App\Entity\Customer'
alias: Customer
здесь два менеджера customer и default. Далее документация говорит, хотите юзать, используйте:
// ...
use Doctrine\ORM\EntityManagerInterface;
class UserController extends AbstractController
{
public function index(EntityManagerInterface $entityManager)
{
// These methods also return the default entity manager, but it's preferred
// to get it by injecting EntityManagerInterface in the action method
$entityManager = $this->getDoctrine()->getManager();
$entityManager = $this->getDoctrine()->getManager('default');
$entityManager = $this->get('doctrine.orm.default_entity_manager');
// Both of these return the "customer" entity manager
$customerEntityManager = $this->getDoctrine()->getManager('customer');
$customerEntityManager = $this->get('doctrine.orm.customer_entity_manager');
}
}
Вопрос в следующем, как Symfony знает, экземпляр какого класса(т.е. какой Manager) необходимо передать аргументом в метод индекс? В конфиге указано, что дефолтный, но нигде нет сопоставления имени default с конкретным Manager-ом.
Доктрина создает несколько экземпляров одного класса менеджера и кладет их в реестр под именами из конфига. Механизм приведен в https://ru.stackoverflow.com/a/1030349/210020
Внутри реестра это массив, ключами которого являются имена менеджеров, а значениями - объекты менеджеров. Это, собственно, и есть сопоставление
PS: $entityManager = $this->getDoctrine()->getManager('default');
- лучше не делать
правильнее
$entityManager = $this->getDoctrine()->getManager();
PPS: И работать с доктринячьими потрохами лучше не в контроллерах, а в сервисах
как нет? а здесь: /vendor/doctrine/persistence/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php
/**
* {@inheritdoc}
*
* @throws InvalidArgumentException
*/
public function getManager($name = null)
{
if ($name === null) {
$name = $this->defaultManager;
}
if (! isset($this->managers[$name])) {
throw new InvalidArgumentException(sprintf('Doctrine %s Manager named "%s" does not exist.', $this->name, $name));
}
return $this->getService($this->managers[$name]);
}
или я что-то не правильно понял?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
есть вводимое число ll+lll; нужно чтобы после + все числа удалены были, как это сделать, числа могут быть не только ll+lll, могуть быть l+ll,lv+vl и тпСуть...
В Spring есть реализация авторизация по LDAPВ нашем конкретном случае, это происходит через ActiveDirectoryLdapAuthenticationProvider
Есть база данных sql, в ней есть две таблицы, при вводе команды use user, выводится фраза Database changedОднако при выполнении такой же последовательности...