Salve,
Credo di poter impazzire seduta stante.
Premesso questo:
Ho un bootstrap, che chiama le pagine, se non la trova mi chiama la pagina 404 e mi scrive nel registro che ha fallito l'apertura della pagina.
Il problema è che il localhost (in questo caso) si inventa altre tre righe di codice.
Questo è il bootstrap:
codice:
<?php
class Bootstrap {
private $_url = null;
private $_controller = null;
private $_controllerPath = 'controllers/'; // Cartella Controllers
private $_modelPath = 'models/'; // Cartella Models
private $_errorFile = 'error.php'; // File Principale degli Errori
private $_defaultFile = 'index.php'; // File Principale
/**
* Inizializzazione Bootstrap
*/
public function init() {
$this->_getUrl();
if (empty($this->_url[0])) {
$this->_loadDefaultController();
return false;
}
$this->_loadExistingController();
$this->_callControllerMethod();
}
/**
* Funzione Recupero Indirizzo Pagina
*/
private function _getUrl() {
$url = isset($_GET['url']) ? $_GET['url'] : null;
$url = rtrim($url, '/');
$url = filter_var($url, FILTER_SANITIZE_URL);
$this->_url = explode('/', $url);
}
/**
* Funzione Carico Controller Predefinito
*/
private function _loadDefaultController() {
require $this->_controllerPath . $this->_defaultFile;
$this->_controller = new Index();
$this->_controller->index();
}
/**
* Funzione Carico controller
*/
private function _loadExistingController() {
$file = $this->_controllerPath . $this->_url[0] . '.php';
if (file_exists($file)) {
require $file;
$this->_controller = new $this->_url[0];
$this->_controller->loadModel($this->_url[0], $this->_modelPath);
} else {
$pagina = BASE_URL . $this->_url[0];
$errore = new errori();
$errore->nontrovata($pagina);
exit();
}
}
/**
* Funzione Richiamo Controller e Metodi
*
* http://localhost/controller/method/(param)/(param)/(param)
* url[0] = Controller
* url[1] = Metodo
* url[2] = Param
* url[3] = Param
* url[4] = Param
*/
private function _callControllerMethod() {
$length = count($this->_url);
// Make sure the method we are calling exists
if ($length > 1) {
if (!method_exists($this->_controller, $this->_url[1])) {
$pagina = BASE_URL . $this->_url[0] . "/" . $this->_url[1];
$errore = new errori();
$errore->nontrovata($pagina);
exit();
} else {
// Determine what to load
switch ($length) {
case 5:
//Controller->Metodo(Param1, Param2, Param3)
$this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3], $this->_url[4]);
break;
case 4:
//Controller->Metodo(Param1, Param2)
$this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3]);
break;
case 3:
//Controller->Metodo(Param1, Param2)
$this->_controller->{$this->_url[1]}($this->_url[2]);
break;
case 2:
//Controller->Metodo(Param1, Param2)
$this->_controller->{$this->_url[1]}();
break;
default:
$this->_controller->index();
break;
}
}
}
}
public function setControllerPath($path) {
$this->_controllerPath = trim($path, '/') . '/';
}
/**
* (Optional) Set a custom path to models
* @param string $path
*/
public function setModelPath($path) {
$this->_modelPath = trim($path, '/') . '/';
}
/**
* (Optional) Set a custom path to the error file
* @param string $path Use the file name of your controller, eg: error.php
*/
public function setErrorFile($path) {
$this->_errorFile = trim($path, '/');
}
/**
* (Optional) Set a custom path to the error file
* @param string $path Use the file name of your controller, eg: index.php
*/
public function setDefaultFile($path) {
$this->_defaultFile = trim($path, '/');
}
}
?>
Questo è il controller degli errori
codice:
<?php
/* Gestione Errori */
class errori {
function __construct() {
$vista = new view();
$vista->css= array('errori');
}
/* Errore 404 Pagina non Trovata */
public function nontrovata($pagina) {
$vista = new view();
$vista->title = 'Errore 404: Pagina Non Trovata';
$vista->render('errori/404', null, 1);
$registro=new registro();
$registro->scrivi("Apertura Pagina: $pagina non riuscita", 'errori');
}
}
?>
e Questo il Registro
codice:
<?php
class registro {
private $file;
function __construct() {
}
/**
* Scrittura Messaggio nel Registro
* @param string $messaggio Messaggio da Scrivere
* @param type $file di Registro da Modificare
*/
public function scrivi($messaggio, $file = 'omero') {
$this->file = DROOT . "reservedarea/admin/logs/$file.log";
setlocale(LC_ALL, 'ita', 'it_IT.utf8');
$data = strftime("%d/%b/%Y - %H:%M:%S");
$messaggio = "[" . $data . "] ~ $messaggio\n";
file_put_contents($this->file, $messaggio, FILE_APPEND | LOCK_EX);
}
/**
* Lettura File Registro
* @param type $file File di Registro da Leggere
* @return type $logfile Contenuto del File di Registro
*/
public function leggi($file = 'omero') {
$this->file = DROOT . "views/gestione/registro/$file.txt";
$logfile = file_get_contents($this->file);
$logfile = explode("\n", $logfile);
return $logfile;
}
}
?>
Se provo a mettere per provare nella barra degli indirizzi http://localhost/broken
Il Registro scrive questo
Dove le ultime tre righe (Quelle con Public) secondo me sono totalmente inventate..
Grazie Daniele