Прежде всего, я хотел бы рассказать вам о своей структуре каталогов.
- /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
Как я могу это исправить, я занимался этим часами, а также, если это возможно, покажите мне, как я могу вызвать модель из каталога моделей из класса контроллера с помощью автозагрузки. Спасибо.