2010-09-07 6 views
0

Я новичок в рамках Zend.Проблема с контроллером рамки Zend

Я получаю сообщение об ошибке при загрузке моего указательного контроллера:

Fatal error: Class 'Places' not found in C:\xampp\htdocs\zend\book\application\controllers\IndexController.php on line 36 

Моего Загрузчик код является

<?php 
class Bootstrap 
{ 
    public function __construct($configSection) 
    { 
     $rootDir = dirname(dirname(__FILE__)); 
     define('ROOT_DIR', $rootDir); 
     set_include_path(get_include_path(). PATH_SEPARATOR . ROOT_DIR . '/library/'. PATH_SEPARATOR . ROOT_DIR . 
     '/application/models/'); 

     require_once 'Zend/Loader/Autoloader.php'; 
     $loader = Zend_Loader_Autoloader::getInstance(); 
     // Load configuration 
     Zend_Registry::set('configSection',$configSection); 
     $config = new Zend_Config_Ini(ROOT_DIR.'/application/config.ini',$configSection); 
     Zend_Registry::set('config', $config); 
     date_default_timezone_set($config->date_default_timezone); 
     // configure database and store to the registry 
     $db = Zend_Db::factory($config->db); 
     Zend_Db_Table_Abstract::setDefaultAdapter($db); 
     Zend_Registry::set('db', $db); 
    } 

    public function configureFrontController() 
    { 
     $frontController = Zend_Controller_Front::getInstance(); 
     $frontController->setControllerDirectory(ROOT_DIR .'/application/controllers'); 
    } 

    public function runApp() 
    { 
     $this->configureFrontController(); 
     // run! 
     $frontController = Zend_Controller_Front::getInstance(); 
     $frontController->dispatch(); 
    } 
} 

У меня есть модель:

<?php 
class Places extends Zend_Db_Table 
{ 
    protected $_name = 'places'; //table name 
    function fetchLatest($count = 10) 
    { 
     return $this->fetchAll(null,'date_created DESC', $count); 
    } 
} 

Мой код контроллер индекса является :

class IndexController extends Zend_Controller_Action 
{ 
    public function indexAction() 
    { 
     $this->view->title = 'Welcome'; 
     $placesFinder = new Places(); 
     $this->view->places = $places->fetchLatest(); 
    } 
} 

Я использую ZF версии 1.10.4

ответ

0

Существует хороший шанс, что вы пропали без вести somethign в вашем объявлении класса попробовать:

<?php 
class Models_Places extends Zend_Db_Table 
{ 
    protected $_name = 'places'; //table name 
    function fetchLatest($count = 10) 
    { 
     return $this->fetchAll(null,'date_created DESC', $count); 
    } 
} 

Класс автозагрузчика Zend будет выглядеть в модели/мест. php для вашего класса.

Также можно инициализировать модели и модуль по умолчанию в загрузчике с:

protected function _initAutoload() { 

     $autoloader = new Zend_Application_Module_Autoloader(array(
        'namespace' => '', 
        'basePath' => dirname(__FILE__), 
       )); 
     $autoloader->addResourceType('models', 'models/', 'Models'); 
     return $autoloader; 
    } 

После того, как сделано, что ваш класс должен быть назван Models_Places.

Ознакомиться с docs об автозагрузке.

+0

Спасибо, к сожалению, похоже, что он не работает с вашим кодом – john

+0

Ну что же не работает? Он должен работать, если у вас нет проблемы где-то в вашем коде. – Iznogood

+0

показывая ту же ошибку, я думаю, что что-то не хватает на $ loader? – john

0

Ну, лично я использую расширенные контроллеры, которые содержат несколько методов использования, которые я использую очень часто. Вот отрывок из моего расширенного контроллера:

<?php 
class My_MyController extends Zend_Controller_Action 
{ 
    protected $_tables = array(); 

    protected function _getTable($table) 
    { 
     if (false === array_key_exists($table, $this->_tables)) { 
      include APPLICATION_PATH . '/modules/' 
      . $this->_request->getModuleName() . '/models/' . $table . '.php'; 
      $this->_tables[$table] = new $table(); 
     } 
     return $this->_tables[$table]; 
    } 
} 

Вам просто нужно определить APPLICATION_PATH в index.php. Тогда ваш контроллер может выглядеть следующим образом:

<?php 
class IndexController extends My_MyController 
{ 
    public function indexAction() 
    { 
     // get model 
     $model = $this->_getTable('ModelName'); 
    } 
} 

Путь, где вы храните My_Controller также должны быть в вашем пути поиска.

Смежные вопросы