Newsgroup: it.comp.www.php
Titolo: 2 quesiti su CodeIgniter

Ho 2 quesiti su CodeIgniter, ho cercato sul forum ufficiale ma non ho 
trovato nulla. Se si trattasse di domande niubbe abbiate pazienza...
1) C'ï¿œ modo di specificare quale controller richiamare nel caso in cui 
venga digitato un url inesistente, ovvero quando non esiste il relativo 
file php del controller o non c'ï¿œ un routing specifico?
Esempio: l'utente naviga su un url inesistente, supponiamo "/prova",  e 
non esiste nï¿œ un controller prova.php nï¿œ uno specifico routing che 
gestisca quell'URL; io vorrei che in quel caso venisse richiamato un 
controller "di default", supponiamo "/indice".
2) Se il db MySql non ï¿œ disponibile, ad oggi ottengo una bella pagina 
bianca. C'ï¿œ modo di testare l'impossibilitï¿œ di connettersi al db? 
Intendo tramite CodeIgniter (estendendo una classe, valorizzando un 
parametro in configurazione, ecc.).
Ringrazio in anticipo chi dovesse rispondermi.
-- 
*Erik*
In ascolto:
- Skunk Anansie / Wonderlustre
- Dimmu Borgir / Abrahadabra
- King Diamond / The spider's lullabye
"Domanda consiglio a chi ben si corregge." [Leonardo Da Vinci]

 bianca. C'è modo di testare l'impossibilità di connettersi al db?
non disponibile in che senso?
non c'è il database o non c'è il database server?
in ogni caso non dovrebbe esserci pagina bianca  ma una segnalazione di 
errore.
Hai cambiato qualcosa nella configurazione?

 Hai cambiato qualcosa nella configurazione?
Mmm, può darsi, ma a livello di db dovrebbe essere rimasto tutto 
standard... A cosa ti riferivi come configurazione?


 (ridefinendo Exceptions.php),
e allora è probabile che il tuo secondo problema è dovuto proprio a 
questo, visto che è Exceptions che si occupa di visualizzare gli errori 
relativi al db, hai per caso sovrascritto show_error ?
Prova a rimuovere la tua estensione e vedere se l'errore viene 
visualizzato. In ogn caso l'errore ti dovrebbe venire scritto nei logs di 
CI, se li hai abilitati.
(Questo problema è capitato anche a me)

 (Questo problema è capitato anche a me)
Cazzarola, sì!!! Grande! Forse mi hai risolto il problema... Nel metodo 
log_exception testavo solo l'esistenza di $this->CI (e se questo è 
settato scrivo su db e mando una mail), invece in quel caso $this->CI è 
settato, ma non lo è per esempio $this->CI->db...
Grazie mille!
P.S. Riguardo al primo problema hai qualche idea? :)


default_controller);
				$this->set_method('index');
 
				// Does the default controller exist in 
the sub-folder?
				if ( ! file_exists(APPPATH.'controllers/'.
$this->fetch_directory().$this->default_controller.EXT))
				{
					$this->directory = '';
					return array();
				}
 
			}
			return $segments;
		}
		return array('errore','index');
	}
}
/* End of file MY_Router.php */
/* Location: ./system/application/libraries/MY_Router.php */
come vedi in caso di 404 si viene rediretti al controller errore.php, il 
cui contenuto è:
<?php
class Errore extends Controller {
	function Errore() {
		parent::Controller();
	}
	function index() {
 
		show_404();
	}
}
?> 
in questo modo ho fatto istanziare CI da router.
infine dentro MY_Exceptions ridefinisco la show_404 e la faccio puntare 
ad una show_error2, in questo modo non infastidisco i messaggi di errore 
del db etc.
ed uso la show_error2 come se fosse l'index dell'ipotetico controllore 
che viisualizza l'errore:
<?php  if ( ! defined('BASEPATH')) exit('No direct script access 
allowed');
class MY_Exceptions extends CI_Exceptions{
	/**
	 * Constructor
	 *
	 */	
	function MY_Exceptions(){
    parent::CI_Exceptions();
  }
 
	/**
	 * 404 Page Not Found Handler
	 *
	 * @access	private
	 * @param	string
	 * @return	string
	 */
  function show_404($page = '')
  {
      $heading = "Error 404! Indirizzo non trovato.";
      $message = "Siamo spiacenti ma l'indirizzo che state cercando non 
esiste, vi chiediamo gentilmente di effettuare una ricerca, o di 
intraprendere la navigazione del sito tramite la colonna di sinistra o il 
navigatore superiore.";
      $this->show_error2($heading, $message, 404);
  }
	function show_error2($heading, $message, $status_code = 500)
	{
		set_status_header($status_code);
		$CI =& get_instance();
		// Codice per visualizzare la pagina
		$CI->load->library(...);
		$CI->load->helper(...);
		$CI->load->model(....);
		echo $CI->load->view('template', $data,TRUE);
 
	}
}
// END MY_Exceptions Class
/* End of file Exceptions.php */
/* Location: ./system/application/libraries/MY_Exceptions.php */
nota bene: visto che la bufferizzazione delle view non è ancora attiva, 
non puoi fare:
		$CI->load->view('template', $data);
ma devi caricare la view e stamparla tu:
		echo $CI->load->view('template', $data,TRUE);
è tutto (e lo so, è brutto)

 MY_Router.php:
Ti ringrazio molto, proverò anche questo, buona idea!
Ciao, Erik
