2009-06-10 3 views
1

젠드 프레임 워크 응용 프로그램 도구로 만든 기본 프레임 워크 코드를 사용하고 있습니다. Default_<*>_<*>이라는 클래스가 자동으로 올바른 디렉토리에서로드되도록 자동 로더 마법을 추가했습니다 (이 경우 Default_Model_TableName).Zend_DB_Table_Abstract의 관계

<?php 
$categories = new Default_Model_ProjectCategories(); 
$category = $categories->find('1'); 
$category->findProjects(); 
:

응용 프로그램/모델/ProjectCategories.php :

<?php 

class Default_Model_ProjectCategories extends Zend_Db_Table_Abstract { 
    protected $_name = 'categories'; 
    protected $_dependentTables = array('Projects'); 
} 

응용 프로그램/모델/Projects.php :

<?php 

class Default_Model_Projects extends Zend_Db_Table_Abstract { 
    protected $_name = 'projects'; 

    protected $_referenceMap = array(
     'Category' => array(
      'columns'   => 'cid', 
      'refTableClass'  => 'ProjectCategories', 
      'refColumns'  => 'id', 
      'onUpdate'   => self::CASCADE, 
      'onDelete'   => self::CASCADE, 
     ) 
    ); 

} 

할 무엇을 시도하고하면 다음과 같다

그 시점에서 Projects.php를 찾을 수 없다는 오류가 발생하고 파일이 프로젝트라는 이름의 클래스가 포함되어 있지 않습니다.

그 시점에서 프레임 워크 (/../library/)에 의해 설정된 포함 경로에 Projects.php를 배치하고 파일을 찾았으나 이제는 전체 디렉토리 구조를 잃어 버리고 이름을 지정하기 때문에 Default_Model_Projects에서 Projects으로 이름을 바꾸어야했습니다. 나는 원래 위치에 파일을 다시 배치하면 일을 모든 것을 얻을, 그리고

protected $_dependentTables = array('Projects'); 

protected $_dependentTables = array('Default_Model_Projects'); 

을 변경할 수 있어요하지만이 또한 내 ->findProjects() 지금 ->findDefault_Model_Projects()이되는 것을 의미한다.

findProjects()을 찾을 때 Default_Model_Projects을 인스턴스화해야한다고 알리는 방법이 있습니까? Zend Framework에서 누락 된 부분입니까, 아니면 내가 속하지 않은 방식으로 무언가를 구 attempt 주려고합니까? 이 문제를 어떻게 해결하셨습니까?

답변

1

이 문제는 새 Autoloader와 이름 공간이있는 클래스 (예 : 사용자가 소유 한 접두사)를로드하는 방식에 의해 도입되었을 수 있습니다.

내 응용 프로그램에서 나는 단순히 'Projects'와 같은 모델 이름을 지정하고 해당 응용 프로그램의 포함 경로에 별도의 models 폴더를 추가합니다. 이것은 하나의 해결책입니다 - 불행히도 네임 스페이스 모델을 올바르게로드 할 수있는 방법을 모르겠지만 Zend_Loader를보다 자세하게 살펴보고 가능한 경우 pluginLoaders를 참조하는 것이 좋습니다.

-1

변경

protected $_dependentTables = array('Projects'); 

protected $_dependentTables = array('Default_Model_Projects'); 
+0

당신은 tly는 나의 전체 질문을 읽지 않았다 ... –

+1

하하, 미안 :) 나는 그것을 놓쳤다 :) 당신은 이것을 할 수있다 : * public function findProjects() {$ this-> findUgly_Long_Name();} * –

0

나는 App_TableName 내 모델 클래스를 축소하는

 
$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    'basePath' => APPLICATION_PATH, 
    'namespace' => 'App', 
)); 
$resourceLoader->addResourceType('model', 'models/', ''); 

뭔가를 할 수하는 데 사용하지만 지금은 작동하지 않는 것 같다 ...