2013-11-13 6 views
0

나는 MySQL에 질문 테이블을 가지고 TableGateway와 QuestionFactory 모델을 가지고있다. TableGateway에서받은 QuestionType에 따라 다른 클래스를 인스턴스화하고 싶습니다. TextQuestion(), BoolQuestion() 등 fetchall 상황에서 이러한 다른 클래스의 결과 집합을 반환합니다.TableGateway와 클래스 팩토리를 사용하여 다른 클래스의 ResultSet 만들기 - ZF2

모든 것은 지금까지 상당히 표준입니다 :

/** 
* fetch all 
* @return resultset 
*/ 
public function fetchAll() 
{ 
    $resultSet = $this->tableGateway->select(); 
    return $resultSet; 
} 

그래서 나는 데이터베이스에 QuestionType에 따라 다른 클래스를 반환 할 QuestionFactory을 얻을 필요가 :

  'Application\Model\QuestionTable' => function($sm) { 
       $tableGateway = $sm->get('QuestionTableGateway'); 
       $table = new \Application\Model\QuestionTable($tableGateway); 
       return $table; 
      }, 
      'QuestionTableGateway' => function ($sm) { 
       $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter'); 
       $resultSetPrototype = new \Zend\Db\ResultSet\ResultSet(); 
       $resultSetPrototype->setArrayObjectPrototype(new \Application\Model\QuestionFactory()); 
       return new \Zend\Db\TableGateway\TableGateway('questions', $dbAdapter, null, $resultSetPrototype); 
      }, 

QuestionTableGateway가있다 TableGatewayBase를 확장 .

저는 Zend \ Db \ ResultSet을 응용 프로그램 특정 버전으로 확장하고 setArrayObjectPrototype() 메소드를 다르게 구현할 생각이었습니다.

도움을 주시면 감사하겠습니다.

Abor.

답변

1

문제를 해결할 수있는 zend 2에서이 작은 앱을 만들었습니다. 가장 흥미로운 것은 AbstractResultSet과 당신이 만들고자하는 클래스를위한 맵으로 배열을 가지고있는 QuestionFab에서 확장 된 FabResiltSet 클래스입니다.

https://github.com/Kil0p/FabResultSet

+0

감사합니다. Kilop, 지연 시간에 죄송합니다. 잠시 떨어져있었습니다. 나는 너를 보살펴 줄 것이다. – Aborgrove

+0

아무런 문제가 없으면, QuestionFab 클래스에 대해서만 자신 만의 설정을 만들고 configF로 사용자 정의 할 수있는 Factory로 QuestionFab 클래스를 만들 수도 있다고 생각한 후에도 문제가 없습니다. – kilop