Проблемы с автозагрузкой с использованием spl_autoload_register

Прежде всего, я хотел бы рассказать вам о своей структуре каталогов.

- /var/www
   |- /social_network/
      |- index.php
      |- /application/
         |-/controllers/  
                 |-user.php
         |- /models/
         |- framework.php
    |-/tmp/

В моем index.php я включаю application/framework.php, вот мой код framework.php

    <?php
spl_autoload_register();
class Framework{
        public function load($page, $data){
                if(is_array($data)){
                        extract($data);
                }
                include "views/".$page;
        }
}

$object = "controller\\$controller";
$object = new $object;
if(method_exists($object,"$method")){
$object->$method();
} else {
        show_404();
}

?>

Теперь с приведенным выше кодом автозагрузка моего класса работает нормально. Если вам интересно, $method и $controller берутся из index.php в зависимости от URI.

Теперь мой друг сказал мне, что это неправильный способ сделать это, поэтому я изменил свой код на

    <?php
function autoload_controller($controller){
    include "$controller.php";
}
spl_autoload_register('autoload_controller');
class Framework{
        public function load($page, $data){
                if(is_array($data)){
                        extract($data);
                }
                include "views/".$page;
        }
}

$object = "controller\\$controller";
$object = new $object;
if(method_exists($object,"$method")){
$object->$method();
} else {
        show_404();
}

?>

Теперь я получаю эту ошибку ниже

Warning: include(controller\User.php): failed to open stream: No such file or directory in /var/www/social_network/application/framework.php on line 3 Warning: include(): Failed opening 'controller\User.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/social_network/application/framework.php on line 3 Fatal error: Class 'controller\User' not found in /var/www/social_network/application/framework.php on line 16 

Как я могу это исправить, я занимался этим часами, а также, если это возможно, покажите мне, как я могу вызвать модель из каталога моделей из класса контроллера с помощью автозагрузки. Спасибо.


person Haider Ali    schedule 10.05.2012    source источник


Ответы (1)


set_include_path(get_include_path().PATH_SEPARATOR.'/var/www/social_network/application/');

или какая-то константа вместо жестко закодированной строки

person Ivan    schedule 10.05.2012