我想在我的zend框架2應用程序中實現存儲庫模式。我已經作出了服務在存儲庫設計中使用Doctrine的EntityManager
<?php
class UserService {
private $userRepository;
public function __construct(IUserRepository $repo) {
$this -> userRepository = $repo;
}
public function createUser($params) {
$this -> userRepository -> create($params);
}
public function findAllUsers() {
return $this -> userRepository -> getAllUsers();
}
}
其具有實現的接口
class UserRepository implements IUserRepository {
public function getAllUsers() {
//return all users
}
public function getUserById($id) {
}
public function getOneUser($params){
}
public function getUsers($params){
}
public function create($params){
}
public function update($params){
}
public function delete($params){
}
}
<?php
interface IUserRepository {
public function getAllUsers();
public function getUserById($id);
public function getOneUser($params);
public function getUsers($params);
public function create($params);
public function update($params);
public function delete($params);
}
在我module.php我使用依賴注入來確定我注入到一個控制器,倉庫的倉庫
public function getControllerConfig() {
return array('factories' => array(
'My\Controller\Accounts' => function(){
return new AccountsController(new UserRepository());
},
),
);
}
在我的控制器中,我將存儲庫傳遞給我的服務
class AccountsController extends AbstractActionController {
private $service;
public function __construct(IUserRepository $repo) {
$this->service = new UserService($repo);
}
public function indexAction() {
$all_users = $this->service->findAllUsers();
return new ViewModel(array('users' => $all_users));
}
}
我的問題是,我使用學說的ORM和我想使用EntityManager在我的倉庫,但我不知道該怎麼做,任何想法和反饋的讚賞
如果我從Entityrepository延長不會我要做像$用戶= $ EM-> getRepository(「我的\型號\用戶」) - > getAllUsers() ;在我的服務班?我希望我的服務類不知道它使用什麼類型的實現從我的數據庫獲取數據。 – DannyBiezen
@DannyBiezen - 不是。您可以將您的服務類限制爲使用IUserRepository接口中定義的方法。您利用EntityRepository實現該接口的事實只是一個實現細節。 – timdev