pb affichage avec ma classe Exception

Eléphant du PHP | 72 Messages

13 oct. 2009, 11:41

Bonjour à tous ,

je viens de creer ma classe exception, tout marche sauf que l'affichage ne me satisfait pas.
j'ai surchargé la classe __tostring de la classe exception comme dans beaucoup de tutoriaux tel que
public function __tostring(){
		static $sMessageErreur='';
		$sMessageErreur.=" Exception : CompteurVisiteImplementsException <br/>";
		$sMessageErreur.=' Code '.parent::GetCode().' : '.$this->sTypeErreurCorrespondante;  
		$sMessageErreur.=' Message   : '.parent::GetMessage().'<br/>';
		$sMessageErreur.=' Fichier   : '.parent::GetFile().' à la ligne :'.parent::GetLine();
		return (string) $sMessageErreur;
	
	}
le probleme est que les <br/> me decalage tout mon affichage tel que :
Image

j'ai bien essayé de remplacer mes <br/> par des \r\n et en passant egalement avec utf8_decode mais rien n'y fait

Alors comment expliqué que di j'utilise la classe exception et que je provoque plusieurs erreurs tel que la hauteur contenant les messages d'erreur depasse celle de la premiere photo, l'affichage reste correcte tel que :
Image

c'est donc que la classe exception gere ses sauts de ligne differement.Pourtant je ne trouve pas le code sur internet qui pourrait m'aiguiller vers la reponse.

Auriez vous ce code?Pourriez vous m'aiguiller ou me donner la reponse directement en effet j'ai beaucoup cherché et me la donné me ferait tout de meme progressé.

Un grand merci

ViPHP
ViPHP | 4674 Messages

14 oct. 2009, 15:59

Hey :-),

\r\n n'est pas le code que tu veux utiliser. Ce serait plutôt \n.
En revanche, tu veux un affichage en HTML ou en texte ?
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

Eléphant du PHP | 72 Messages

15 oct. 2009, 16:38

Merci de ta reponse dont j'avais pourtant essayé mais sans resultat.La possibilité qui avait marché etait <br/>\n mais des que les exceptions normalent furent echappées mon probleme avec l'utilisation de mon exception specifique ne marcha plus.

pour info , je remets les images qui ne s'etaient visiblement pas affichées :

[img]http://www.azuracd.fr/TEST/Apres.png[/img]

[img]http://www.azuracd.fr/TEST/Avec.png[/img]

Ma page finale est donc une page Html .Mais je veux juste que mon affichage d'erreur ne "deformate" pas mon affichage html de ma page finale.

Merci encore, j'espere que tu m'apporteras la solution car j'avoue que j'ai cherché et que j'aime pas ne pas toruver et surtout comprendre.

merci

ViPHP
fab
ViPHP | 2657 Messages

15 oct. 2009, 16:44

Quand tu as déclaré ta class CompteurVisiteImplementsException tu as mis 2 paramètres pour la méthode __construct() or quand tu lèves l'exception avec throw tu dois lui en passer qu'un seul :)
Le message d'erreur est clair :)

PS/ Par defaut il me semble que __construct() à deux paramètres dont le deuxième et optionnel ( $code )
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 72 Messages

15 oct. 2009, 17:16

c'etait fait expres afin de provoquer une erreur et voir comment celle-ci s'affichait dans ma page html.

Le code marche correctement seul l'affichage me chiffonne.En effet , supposons qu'un jour je ne sai spour quelle raison suite à un erreur de maintenance un fichier manque et le script lancé une erreur le visiteur se retrouverait avec une page tres moche.

Eléphant du PHP | 72 Messages

15 oct. 2009, 17:19

Pour que tu comprennes mieux : voici ma classe complete :
class CompteurVisiteImplementsException extends Exception {

	private $sTypeErreurCorrespondante;
	
	

	public function __construct($sMessage, $iCode){       
		parent::__construct($sMessage,$iCode);             
		
		switch ($iCode){
			case '1':$this->sTypeErreurCorrespondante = ' Erreur de typage ';
			break;
			case '2':$this->sTypeErreurCorrespondante = ' Erreur de code ';
			break;
			default:
				$this->sTypeErreurCorrespondante = ' Erreur du passage d\'un code d\'erreur en argument de levée d\'une exception';
			break;
		}
		
	
	}

	public function __tostring(){
		static $sMessageErreur='';
		$sMessageErreur.=" Exception : CompteurVisiteImplementsException <br/>\n";
		$sMessageErreur.='Code '.parent::GetCode().' : '.$this->sTypeErreurCorrespondante."<br/>\n";
		$sMessageErreur.=' Message   : '.parent::GetMessage()."<br/>\n";
		$sMessageErreur.=' Fichier   : '.parent::GetFile().' à la ligne :'.parent::GetLine();
		return $sMessageErreur;
	
	}
}// fin de la classe CompteurVisiteImplementsException




et par exemple une fonction de ma classe de compteur de visite :
public function mAfficheNbreVisiteur()
	{
		if (TRUE === is_array($this->aNomMethodeAInvoquer)){
			foreach ($this->aNomMethodeAInvoquer as $sValue){ 			/** on parcourt un tableau à une dimension donc nous n'avons pas besoin des clefs pour acceder aux valeurs **/
				// on verife neanmoins que la fonction que l'on cherche à lancer existe bien avec la methode method_exists car nous sommes dans une classe , il lui faut en premier parametre le nom de la classe
				
				if ( TRUE === method_exists($this->sNomDeLaClasse,$sValue)){
					$this->$sValue();                                                 /** equivalent à ecrire ces trois lignes $this->mAfficheInfoDuFichier (); $this->mTraitementInfo (); $this->mEnregistreInfoDansFichier ();**/
				}else{
					throw new CompteurVisiteImplementsException ('La methode '.$sValue.'() est inexistante .','1'); // on lance une exception
				}
			}//fin du foreach de parcours du tableau
			unset ($this->aNomMethodeAInvoquer);
		}else{
			throw new CompteurVisiteImplementsException ('Un tableau est attendu','2' ); // on lance une exception
		}
	}



tu sais tout maintenant.seule l'affichage pose de gros souci

ViPHP
fab
ViPHP | 2657 Messages

15 oct. 2009, 18:02

Hum tu voudrais donc une belle page d'exception ? :)

Pour celà j'utilise une méthode un peu barbare mais qui est efficace ! ( En pré-requis il faut utiliser le buffering histoire d'être certain que rien ne c'est affiché avant )

Donc c'est simple ma méthode __toString() fait appel à un template, qui est en fait une véritable page web et à la fin je fais un petit die() :)


C'est crade y a peu être d'autres méthodes plus propre mais ça marche
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Mammouth du PHP | 983 Messages

20 oct. 2009, 13:18

Je te conseille de jeter un oeil ici : http://www.sitepoint.com/blogs/2006/04/ ... ue-screen/

Le principe est de définir un gestionnaire d'exceptions qui les affiche joliment ;) Personnellement, je ne peux plus m'en passer en période de développement.