まず、私のディレクトリ構造をお話ししたいと思います
- /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は、URIに応じてindex.phpから取得されます。
今、私の友人は、これは間違った方法だと言ったので、コードを次のように変更しました
<?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
どうすればこれを修正できますか?私はこれに何時間もいます。また、可能であれば、autoloadを使用してコントローラークラス内からmodelsディレクトリからモデルを呼び出す方法を教えてくださいありがとうございます