2011-03-23 5 views
1

Propel을 내 젠드 응용 프로그램에서 작동 시키려고하는데, Propel 라이브러리를 라이브러리 (/ propel)에서로드 할 수 있지만 호출 할 때 얻을 수있는 것 같습니다. 예외 : '연결을 만들려고하면 데이터 소스 [기본]에 대한 런타임 구성 파일에 연결 정보가 없습니다 ('Propel :: getConnection '). 내 Db는 '기본'이름조차되지 않습니다. 너무 지금Propel ORM에 대한 경로를 Zend에서 인식하게하는 방법

  require_once 'propel/Propel.php'; 
     Propel::setConfiguration($this->getOptions('propel/MyPropel-conf.php')); 
     Propel::initialize(); 

     // so we can get the connection from the registry easily 
     return Propel::getConnection(); 

내가 추진의 CONFIGS (뿐만 아니라 classmap의 conf)을 원하는 '/ 응용 프로그램/CONFIGS'에있을 (사본이있다 : 나는 다른 SO 질문/답변에서 내 bootstrap.php이 있습니다),하지만 Propel을 라이브러리/propel에서로드 할 수 있다면 거기에 내 'conf'파일을 이동 시켜도로드 할 수 있다고 생각했습니다. 그것은 수동으로 매개 변수를로드하여 config를 '강제로', 또는 만약 내가 임시 '오른쪽'위치에 (또는 절대 경로를 사용하는 것) 보인다면 나는 예외가 다음과 같습니다 : 'Unable PDO 연결을 여는 경우 [wrapped : SQLSTATE [28000] [1045] 사용자 'www-data'@ 'localhost'에 대한 액세스가 거부 됨 Propel이 내 구성에주의를 기울이지 않는 것처럼. 내 설정은 다음과 같습니다. 는 XML 변환 :

$conf = array (
    'datasources' => 
    array (
    'unmActTestDB' => 
    array (
     'adapter' => 'mysql', 
     'connection' => 
     array (
     'dsn' => 'mysql://root:[email protected]/unmActTestDB', 
    ), 
    ), 
    'default' => 'unmActTestDB', 
), 
    'log' => 
    array (
    'ident' => 'propel-act', 
    'level' => '7', 
), 
    'generator_version' => '1.5.6', 
); 
$conf['classmap'] = include(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classmap-unmActTestDB-conf.php'); 
return $conf; 

은 그 충돌을 일으킬 것이다, 나는 아직도, 너무 application.ini 파일에 젠드 PDO DB 어댑터 로딩이 도움이된다면

? Zend와 함께 Propel을 사용할 수있는 표준 방법이 있습니까? 아니면 내가 뭘 잘못하고 있는지 알 수 있니?

저는 여기에 여러 게시물을 올렸습니다.이 게시물은 The Adventures Of Merging Propel With Zend Framework입니다.이 게시물은 Zend 's dev zone Integrating Propel with the Zend Framework에서 Propel Docs를 비롯한 여러 게시물 중에서 하나입니다. 그들은 도움이되었지만 나는이 문제에 정말로 고심하고있다. 미리 감사드립니다!

내가에 좋은 그립을 가지고 :

Directory Structure

+0

나는 경로 문제를 해결했고 연결 문제는 내 런타임 conf의 xml 파일에 & 이라는 내 ommitance 때문이었습니다. – rhaag71

+0

공유해 주셔서 감사합니다. +1 –

+0

답변으로 게시해야합니다. 자신의 질문에 대답하는 데 아무런 문제가 없습니다. – Phil

답변

2

내가하고 결국 것은 이것이다 : 라이브러리도 두 펠의 confs// 폴더를 추진 승 나의 현재 젠드 디렉토리 구조는 (다음과 같습니다 내 모델을 Propel을 사용하여 '역방향'에서 생성하는 방법. 이전 모델과 함께 내 모델을 빌드 할 'schema.xml'파일을 만들었습니다.

또한 'runtime.xml'파일이 올바르지 않습니다. 몇 가지 태그 생략 때문에 올바른 데이터베이스에 연결하지 못했지만 전체적으로 꽤 간단합니다.

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
<log> 
    <ident>unmActTestDB</ident> 
    <level>7</level> 
</log> 
<propel> 
    <datasources default="unmActTestDB"> 
    <datasource id="unmActTestDB"> 
    <adapter>mysql</adapter>  
    <connection> 
    <dsn>mysql:host=localhost;dbname=unmActTestDB</dsn> 
    <user>zend</user> 
    <password>PASSWORD</password> 
    <database>unmActTestDB</database> 
    </connection>  
    </datasource> 
    </datasources> 
</propel> 
</config> 

'DSN'태그는 '사용자', '비밀번호'를 추가하여 위의 형식이어야하고, '데이터베이스'태그. 이 문제는 데이터베이스 연결 오류로 수정되었습니다. 위와 같이 여기에 인용 된 것처럼 예외가 발생했습니다 : '데이터 소스에 대한 런타임 구성 파일의 연결 정보가 없습니다 [기본]'

내 모델 로딩이 끝나는 한, '폴더에 이미 내 응용 프로그램에서 해당 폴더가 자동로드되고 플러스 형식 인 것처럼 보입니다. 여기

내 '업데이트'디렉토리 구조의 이미지입니다 : My directory structure w/ Propel models

주 내 디렉토리에있는 'unmActTestDB'폴더의 추가, 이건 내 ORM 모델이다. 또 하나주의해야 할 것은 내 생성 된 'conf'파일을 내 'application/configs'폴더에 넣는 것입니다. 이것들은 runtime.xml 파일을 수정하고 'rebuild'한 후에 이제는 정확합니다.

부수적으로, 나는 '스키마'를 편집해야했습니다.xml '파일을 손으로 (여러 번 :) :) ... 원래 데이터베이스는 테이블에 복수 이름을 사용했기 때문에 모든'phpname '선언 (선언 태그의 속성)이 단수로 편집되었으므로 '사용자'라는 개체에 액세스하는 대신 '사용자'개체에 액세스 할 수 있습니다. 나는 테이블 이름을 동일하게 유지했다. (테이블은 복수형이고 기존 데이터를 가져 오는 데 문제가 없을 것이다.) 이것은 내 질문 중 다른 하나에 대한 대답으로 제안되었다. 여기를 참조 How to get related object Propel ORM.

내가 만든 또 다른 커다란 편집은 DB의 여러 SQL 뷰에 대한 기본 키 선언 (다시 한 번 특성)을 추가하는 것이 었으며 선언에 'readonly'및 'noSQL'속성을 추가했습니다. 내 견해에 (Propel 모델을 통해) 액세스 할 수 있습니다.

그리고, 단지 철저하게, 그리고 여기에 관심이있는 사람들을 위해 나를 위해 내 '추진 초기화'를 수행 내 'bootstrap.php'파일에 추가되는 ...

protected function _initPropel() 
     { 
      $this->_logger->info('Bootstrap ' . __METHOD__); 

      require '../library/propel/Propel.php'; 
      Propel::init(APPLICATION_PATH . '/configs/unmActTestDB-conf.php'); 
      Propel::initialize(); 

      return Propel::getConnection(); 
     } 

또 다른 참고 : '$ this -> _ logger -> info ('부트 스트랩 '방법);' 이 메소드가로드 된 것을 'firePHP'에게 알려주는 'logging'메소드를 호출한다. /configs/unmActTestDB-conf.php '는 Propel이 생성하는 두 번째'conf '파일을 호출합니다. 여기에 해당 파일의'corrected '버전 (unmActTestDB.conf 파일)이 있습니다.' 연결 '배열.

<?php 
// This file generated by Propel 1.5.6 convert-conf target 
// from XML runtime conf file runtime-conf.xml 
$conf = array (
    'datasources' => 
    array (
    'unmActTestDB' => 
    array (
     'adapter' => 'mysql', 
     'connection' => 
     array (  
     'dsn' => 'mysql:host=localhost;dbname=unmActTestDB', 
     'user' => 'zend', 
     'password' => 'PASSWORD', 
     'database' => 'unmActTestDB', 
    ), 
    ), 
    'default' => 'unmActTestDB', 
), 
    'log' => 
    array (
    'ident' => 'unmActTestDB', 
    'level' => '7', 
), 
    'generator_version' => '1.5.6', 
); 
$conf['classmap'] = include(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classmap-unmActTestDB-conf.php'); 
return $conf; 

나는 지금 뛰쳐 있습니다! 이것은 갈 수있는 좋은 방법이었습니다. 그렇지 않으면 내 앱에 대해 많은 매핑 클래스를보고 쓰고있었습니다. Propel (현재)이 응용 프로그램에 대해 300 개 이상의 모델을 생성합니다! 플러스베이스 클래스, 그것은 내게 영원히 걸릴 것입니다 ...