J'ai mon fichier PHP principal qui est exécuté chaque fois que quelqu'un frappe mon serveur. Il ressemble à ceci:Autoriser la classe instanciée à accéder à la classe include dans le créateur
<?php
$config = require_once('./config/general.php');
define('ROOT', __DIR__.'/');
include(constant('ROOT').'libraries/log4php/Logger.php');
Logger::configure(constant('ROOT').'config/logging.xml');
$log = Logger::getLogger('main');
$requested_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$route_url = str_replace($config['baseURL'], '', $requested_link);
$route_url = $route_url == '' ? '/' : $route_url;
define('ROUTE', $route_url);
require_once 'routeme.php';
routeme.php
trouve la meilleure classe « routage » pour gérer l'URL demandée. Il instancie cette classe puis transmet l'information de demande à l'instance de la classe de routeur qu'elle a créée pour qu'elle soit gérée.
Tous les routeurs étendent une classe de base:
<?php
namespace Blaze;
class Router {
private $log;
public function __construct() {
// The __CLASS__ constant holds the class name
$this->log = Logger::getLogger(__CLASS__);
}
public function routes(){
return array();
}
}
Un exemple routeur:
<?php
namespace Blaze;
class GeneralRouter extends Router {
public function RootRoute ($url){
$log->info($url);
}
public function routes(){
return array(
'/' => 'RootRoute'
);
}
}
lorsque je tente de lancer l'application, il échoue parce que la classe Router
ne voit pas inclus Logger
classe de log4php (les instructions de journal dans le fichier principal s'exécutent bien, bien sûr). Je ne peux pas ré-inclure la classe Logger par routeur car log4php ne permet que d'être inclus une fois dans une application (probablement pour éviter les conflits de verrouillage de fichiers). Comment puis-je laisser le routeur accéder/voir la classe Logger?
La solution doit être extensible, c'est-à-dire que j'aurai plus de classes plus tard, comme la classe Router
qui devra également accéder à la classe Logger.
Merci! C'est ce que je reçois pour ne pas programmer en PHP depuis presque 3 ans lol –
@KeithM Vous êtes les bienvenus :) –