2015-02-26 3 views
1

J'écris une application PHP simple qui utilise Swift Mailer library. Mon application n'utilise pas d'espaces de noms ni de compositeur.Swift Mailer ruines autolading

Cependant, après avoir demandé swift_required.php mes classes (modèle) ne sont pas trouvées (Erreur fatale: Class 'Format' pas trouvé est lancé par PHP interpréter).

Autolading

define("_DOCUMENT_ROOT", str_replace("//", "/", $_SERVER['DOCUMENT_ROOT'] . "/")); 
    function __autoload($class_name) { 
     $file_name = $class_name . '.php'; 
     $include_foleder = array("php/model/", "templates/","cron/crons_tasks/"); 
     foreach ($include_foleder as $folder) { 
      $abs_path = _DOCUMENT_ROOT . $folder . $file_name; 
      if (file_exists($abs_path)) { 
       require_once $abs_path; 
      } 
     } 
    } 

partie de la fonction Problématiques

$bar = Format::bar($foo); //works fine 
    require_once _DOCUMENT_ROOT . "php/lib/swiftmailer-master/lib/swift_required.php"; //works fine 
    $bar = Format::bar($foo); //Class not found 

classe Format est ma classe personnalisée, situé dans _DOCUMENT_ROOT . php/model/Format.php. Aussi d'autres classes personnalisées (à partir du dossier modèle) après avoir demandé Swift Mailer sont introuvables.

Donc je suppose que mon ancien chargement automatique est en quelque sorte annulé par Swift Mailer, est-ce possible?

Merci.

Répondre

1

Au lieu de __autoload(), vous devez utiliser spl_autoload_register.

If there must be multiple autoload functions, spl_autoload_register() allows for this. It effectively creates a queue of autoload functions, and runs through each of them in the order they are defined. By contrast, __autoload() may only be defined once.

http://php.net/manual/en/function.spl-autoload-register.php

define("_DOCUMENT_ROOT", str_replace("//", "/", $_SERVER['DOCUMENT_ROOT'] . "/")); 

spl_autoload_register(function($class_name) { 
    $file_name = $class_name . '.php'; 
    $include_folder = array("php/model/", "templates/","cron/crons_tasks/"); 
    foreach ($include_folder as $folder) { 
     $abs_path = _DOCUMENT_ROOT . $folder . $file_name; 
     if (file_exists($abs_path)) { 
      require_once $abs_path; 
     } 
    } 
});