У меня есть класс объекта доступа к данным (DAO), и мне нужно внедрить его в несколько моделей.
$dao = new DAO("mysql", "username", "password")
$userModel = new UserModel($dao);
Использование внедрения зависимости очень важно для меня. Так это должно выглядеть примерно так:
//My DAO class
class DAO($connection, $username, $password) {
$this->connection = $connection;
$this->username = $username;
$this->password = $password;
}
//My user model that I am injection the DAO class into
class UserModel(DAO $dao) { //Where should i add my connection/username and password?
$this->dao = $dao;
}
К сожалению, я не могу найти способ указать свое соединение и учетные данные в конструкторе. Я также хотел бы использовать тот же экземпляр DAO и UserModel в другом месте.
Вопрос: Как я могу указать различные соединения / учетные данные для разных моделей / услуг а также сохранить тот же экземпляр DAO?
Постскриптум Я посмотрел на прыщ, Laravel DI, Spring … но не могу найти хорошее решение.
Контейнер IoC Laravel позволяет вам указывать разные распознаватели для разных классов.
Использовать when()->needs()->give()
течь:
$container->when('UserModel')->needs('DAO')->give(function () {
return new DAO('connectionA', 'usernameA', 'passwrodA');
});
$container->when('PostModel')->needs('DAO')->give(function () {
return new DAO('connectionB', 'usernameB', 'passwrodB');
});
Увидеть документы. Ищите раздел под названием Контекстная привязка.
Других решений пока нет …