2010-08-06 4 views
0

doctrine 2.10에서 zend framework 1.10을 사용하고 있습니다. 내 (doctrine) 모델 클래스에서 내 응용 프로그램이 설정 한 변수를 참조하는 것이 좋습니다. bootstrap.php, Zend_Registry에 저장된 변수, 나는 그 전역 변수와 같은 것 같아)모델에서 응용 프로그램에 의해 변수 참조 설정

교리 entityManager는 무엇인가에 접근하려고합니다. 또한 난의 ID를 원하는 사용자로 로그인 한

+0

레지스트리에 저장 하시겠습니까? –

+0

엔티티 관리자 –

답변

1

나는 비슷한 설정 (+ Doctrine2 ZF 1.10)와 프로젝트를 구축, 그리고 난 많은 말했다 takeshin 처럼,이 상황에 대처하기 위해 의존성 주입을 사용했습니다. 전체 프로젝트 저장소 URL은 다음과 같습니다 : https://bitbucket.org/phpfour/zf-doctrine2. 다음은 일부 코드 발췌 부분입니다.

<?php 

require_once APPLICATION_PATH . "/models/PostManager.php"; 

class IndexController extends Zend_Controller_Action 
{ 
    private $_em; 

    public function init() 
    { 
     $this->_em = $this->getInvokeArg('bootstrap')->getResource('doctrine'); 
    } 

    public function indexAction() 
    { 
     $pm = new PostManager($this->_em); 
     $this->view->posts = $pm->getPublicPosts(); 
    } 

내 엔티티 관리자 (또는 서비스 클래스) :이 도움이

<?php 

class PostManager 
{ 
    protected $_em; 

    public function __construct(Doctrine\ORM\EntityManager $em) 
    { 
     $this->_em = $em; 
    } 

    public function getPublicPosts() 
    { 
     $query = $this->_em->createQuery('SELECT p FROM Entities\Post p WHERE p.visible = true'); 
     $posts = $query->getResult(); 
     return $posts; 
    } 

희망

여기 내 컨트롤러입니다!

0
당신이 단순히 모델에 다음과 같은 일을 할 수있는 다음, 로그인 한-userId를 문제에 대한 Zend_Auth를 사용한다

class Model extends BaseModel 
{ 
    public function something() 
    { 
     $auth = Zend_Auth::getInstance(); 
     if ($auth->hasIdentity()) { 

      $loggedInUserId = $auth->getIdentity()->id; 
     } 
    } 
} 
+0

예, 저는 현재 그런 것을했습니다. 내 모델에서 Zend_Auth를 참조하지 않는 것이 더 좋은지 궁금합니다. 또는 너무 많이? –

0

아무 문제 없다 이 접근법 (싱글 톤을 언급하지 않는 한). 가능하면 의존성 주입을 사용하십시오.

그러나 서비스 (또는 2)를 만들 것입니다.

class Modulename_Services_Servicename 
{ 
    public function getCurrentUser() { ... } 

    public function getCurrentUserModel() { ... } 

    public function isLogged() { ... } 

    public function authenticate() { ... } 

    public function getSomeData() 
    { 
     $user = $this->getCurrentUser() 
     $model = new YourModel($user); 
     $query = ....; 
     $result = $query->execute(); 

     return $result; 

    } 

    public function getSomeMoreData($usermodel) { ... } 

} 
+0

'Zend_Registry'는 싱글 톤입니다. 그러나 어떤 종류의 변수에 대한 싱글 톤의 문제점은 무엇입니까? 하지만 뭘하고있는거야 인증 및 모델 논리를 혼합하는 것 같아? –

+0

@jiewmeng 싱글 톤은 상수와 같습니다. 어디에서나 얻을 수 있습니다. 다른 변수의 경우 종속성 주입이 그 방법입니다. 필자가 작성한 것처럼 서비스를 만들려고합니다 (* 또는 2 *, 다른 논리에 대해 인증 용으로 분리). – takeshin

관련 문제