Проблема с контроллером Zend Framework - PullRequest
0 голосов
/ 07 сентября 2010

Я новичок в Zend Framework.

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

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

Ответы [ 2 ]

0 голосов
/ 08 сентября 2010

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

<?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, также должен быть в вашем пути включения.

0 голосов
/ 07 сентября 2010

Есть большая вероятность, что вы пропустили что-то в объявлении класса попробовать:

   <?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 будет искать Models / place.php для вашего класса.

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

protected function _initAutoload() {

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

После этого ваш класс должен называться Models_Places.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...