2012-05-10 3 views
0

Tout d'abord, je tiens à vous dire ma structure de répertoireproblèmes de chargement automatique à l'aide spl_autoload_register

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

Dans mon index.php i implique notamment l'application/framework.php ici est mon code 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(); 
} 

?> 

Maintenant, avec le code ci-dessus, le chargement automatique de ma classe fonctionne très bien. Dans le cas où vous vous demandez $ method et $ controller vient de index.php en fonction de l'URI.

maintenant un de mes amis m'a dit que c'est mauvaise façon de le faire si j'ai changé mon code pour

<?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(); 
} 

?> 

Maintenant, je reçois cette erreur ci-dessous

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 

Comment puis-je résoudre ce problème, Je suis à ce pendant des heures et même s'il est possible s'il vous plaît me montrer comment je peux appeler un modèle à partir du répertoire des modèles à l'intérieur d'une classe de contrôleur à l'aide autoload Merci

Répondre

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

ou une chaîne constante au lieu d'une chaîne codée en dur

Questions connexes