Возможные причины, почему автозагрузка не будет работать в Zend Framework 1.10.2? - PullRequest
0 голосов
/ 10 марта 2010

Я пишу приложение, используя Zend Framework 1.10.2.

Я создал несколько классов моделей и контроллер для их обработки.

Когда я выполняю свое приложение и обращаюсь к администратору. Я вижу эту ошибку.

Неустранимая ошибка: класс 'Application_Model_DbTable_Users' не найден в C: \ xampp \ htdocs \ bidpopo \ application \ controllers \ AdminController.php в строке 16

Ошибка ясно показывает свою ошибку автозагрузки.

Поэтому я написал этот код в файле начальной загрузки.

    protected function initAutoload()
{
    $modeLoader = new Zend_Application_Module_AutoLoader(array
        ('namespace'=>'','basePath'=>APPLICATION_PATH ));
    //echo(APPLICATION_PATH);
    return $modeLoader;
}

Тем не менее ошибка остается :(. Кто-нибудь может подсказать, чего мне здесь не хватает?

Это местоположение класса пользователей модели.

C: \ XAMPP \ HTDOCS \ bidpopo \ приложения \ модели \ DbTable \ Users.php

Это его код.

    class Application_Model_DbTable_Users extends Zend_Db_Table_Abstract
{
    //put your code here
protected $_name='users';

public function getUser($id)
{
    $id = (int)$id;
    $row = $this->fetchrow('id='.$id);
    if(!$row)
    {throw new Exception("Could not find row id - $id");}
    return $row->toArray();   
}

public function addUser($userDetailArray)
{
    $this->insert($userDetailsArray);
}

public function updateUser($id,$userDetailArray)
{
    $this->update($userDetailArray,'id='.(int)$id);
}

public function deleteUser($id)
{
    $this->delete('id='. (int)$id);
}

}

Это код контроллера администратора

class AdminController extends Zend_Controller_Action
{

    public function init()
    {
        /* Initialize action controller here */
    }

    public function indexAction()
    {
        $this->view->title= "All Users";
        $this->view->headTitle($this->view->title);

        $users = new Application_Model_DbTable_Users();
        $this->view->users = $users->fetchAll();
    }

    public function addUserAction()
    {
        // action body
    }

    public function editUserAction()
    {
        // action body
    }

    public function deleteUserAction()
    {
        // action body
    }

1 Ответ

1 голос
/ 10 марта 2010

Ваши классы приложений не соблюдают правильное соглашение об именах для заданного пространства имен. Zend_Application_Module_AutoLoader немного отличается от обычного автозагрузчика тем, что он не просто меняет «_» в имени класса на «/». Он просматривает вторую часть имени класса и затем проверяет папку на наличие класса, основываясь на этом.

Вам нужно изменить строку:

$modeLoader = new   Zend_Application_Module_AutoLoader(array(
    'namespace'=>'Application',
    'basePath'=>APPLICATION_PATH
));

Это означает, что он будет автоматически загружать все классы модулей с префиксом «Application_». Когда второй частью класса является Model_, он будет искать в «{$ basePath} / models» класс. '_' В остальной части имени класса будет заменено на '/'. Таким образом, путь к файлу будет "{$ basePath} /models/DbTable/Users.php".

Подробнее здесь .

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