Я использую код фреймворка по умолчанию, который был создан с помощью инструмента Zend Framework Application. Я добавил магию автозагрузчика, чтобы любые классы с именем Default_<*>_<*>
автоматически загружались из правильного каталога, в данном случае Default_Model_TableName
.
применение / модель / 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,
)
);
}
Я пытаюсь сделать следующее:
<?php
$categories = new Default_Model_ProjectCategories();
$category = $categories->find('1');
$category->findProjects();
В этот момент я получаю сообщение об ошибке, что он не может найти Projects.php, или что файл может не содержать класс с именем Projects.
В этот момент я помещаю Projects.php в путь включения, который был задан фреймворком (/../library/), и файл найден, но теперь я теряю всю структуру каталогов и именую, потому что у меня переименовать Default_Model_Projects
в Projects
. Я могу заставить все работать, если я помещаю файл обратно в исходное местоположение и меняю
protected $_dependentTables = array('Projects');
до
protected $_dependentTables = array('Default_Model_Projects');
но это также означает, что мой ->findProjects()
теперь становится ->findDefault_Model_Projects()
.
Есть ли способ сказать ему, что, когда я ищу findProjects()
, он должен создать экземпляр Default_Model_Projects
? Это что-то, чего не хватает в Zend Framework, или я пытаюсь запихнуть что-то таким образом, чтобы оно не принадлежало? Как вы решили эту проблему?