Bonjour,
j'essaie de me passer de la fonction mail(), pour utiliser la bibliothèque PHPMailer.
J'ai une structure MVC qui utilise les "namespace" et un autoloader que voici :
<?php
namespace App;
class Autoloader
{
static function register()
{
spl_autoload_register(array(__CLASS__, 'autoload'));
}
static function autoload($class_name)
{
if (strpos($class_name, __NAMESPACE__ . '\\') === 0)
{
$class_name = str_replace(__NAMESPACE__ . '\\', '', $class_name);
require __DIR__ . '/' . $class_name . '.php';
}
}
}
Je n'avais encore jamais essayé d'utiliser une bibliothèque PHP, et j'ai des "conflits" avec mon autoloader.
Ce que je fais
namespace App\Controller;
class UsersController extends AppController
{
public function newAccount()
{
...
require ROOT . '/Vendors/PHPMailer/PHPMailerAutoload.php';
$mail = new \PHPMailer;
...
}
}
Ce que je veux
Quand je fais un "new PHPMailer", ça utilise mon autoloader au lieu d'utiliser l'autoloader de la bibliothèque de PHPMailer.
Moi ce que j'aimerai c'est que ça utilise l'autoloader de PHPMailer.
Ce que j'obtiens
Fatal error: Uncaught Error: Class 'PHPMailer' not found in
C:\xampp\htdocs\work\monSite\app\Controller\UsersController.php:226
la ligne 226 étant :
$mail = new \PHPMailer;
Ce que j'ai essayé
Enlever l'antislash quand je fais un new:
$mail = new PHPMailer;
ce qui m'a donné l'erreur :
Warning: require(C:\xampp\htdocs\work\monSite\app/Controller\PHPMailer.php): failed to open stream:
No such file or directory in C:\xampp\htdocs\work\monSite\app\Autoloader.php on line 47
La ligne 47 étant : (ligne 47 parce-que chez moi j'ai PLEIN de echo partout pour essayer de débuger)
require __DIR__ . '/' . $class_name . '.php';
J'ai essayé de mettre une condition dans MON autoloader pour gérer le cas "PHPMailer".
J'ai espéré qu'en chargeant l'autoloader de PHPMailer ça irait peut-être mais non :
static function autoload($class_name)
{
if (strpos($class_name, __NAMESPACE__ . '\\') === 0)
{
if (preg_match('/phpmailer/i', $class_name))
{
require dirname(__DIR__) . '/Vendors/PHPMailer/PHPMailerAutoload.php';
}
else
{
$class_name = str_replace(__NAMESPACE__ . '\\', '', $class_name);
require __DIR__ . '/' . $class_name . '.php';
}
}
}
J'ai essayé un million d'autres trucs foireux...
Voilà je sèche, ça fais quelques jours maintenant que je me tappe la tête contre les murs...
Si quelqu'un peut m'aider ^^
Merci.