IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Variables non lues dans le fichiers routes.xml


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Par défaut Variables non lues dans le fichiers routes.xml
    Salut tout le monde !

    En fait, je développe une application mais je n'arrive pas à lire les variables présentes dans mon fichiers routes.xml.
    Pourtant, comme c'est ma première application en POO grâce au tuto sur OC, je ne trouve pas d'où vient l'erreur.

    C'est bizarre car la condition renvoi toujours 'TRUE'...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public function getController(){
    	$router = new \Library\Router;
    	$xml = new \DOMDocument;
    	$xml->load(__DIR__.'/../Applications/'.$this->getName().'/Config/routes.xml');
    	$routes = $xml->getElementsByTagName('route');
    	// On parcourt les routes du fichier XML.
    	foreach ($routes as $route){
    		$vars = array();
    		// On regarde si des variables sont présentes dans l'URL.
    		if ($route->hasAttribute('vars')){
    			echo 'TRUE';
    			$vars = explode(',', $route->getAttribute('vars'));
    		}
    		// On ajoute la route au routeur.
    		$router->addRoute(new Route($route->getAttribute('url'), $route->getAttribute('module'), $route->getAttribute('action'), $vars));
    	}
    	echo '<br /><pre>';
    	var_dump($vars);
    	echo '</pre>';
    	try{
    		// On récupère la route correspondante à l'URL.
    		$matchedRoute = $router->getRoute($this->httpRequest->getURI());
    	}
    	catch (\RuntimeException $e){
    		if ($e->getCode() == \Library\Router::NO_ROUTE){
    			// Si aucune route ne correspond, c'est que la page demandée n'existe pas.
    			$this->httpResponse->redirect404();
    		}
    	}
    	// On ajoute les variables de l'URL au tableau $_GET.
    	$_GET = array_merge($_GET, $matchedRoute->getVars());
    	// On instancie le contrôleur.
    	$controllerClass = 'Applications\\'.$this->name.'\\Modules\\'.$matchedRoute->getModule().'\\'.$matchedRoute->getModule().'Controller';
    	return new $controllerClass($this, $matchedRoute->getModule(), $matchedRoute->getAction());
    }
    Vous pouvez télécharger le projet ici : http://mralexan14.hostingsiteforfree.com : SiteSylvainPOO.zip

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Essaie de nous en dire plus. Quel est le problème exactement? Le routing ne fonctionne pas? Tu as des messages d'erreurs? lesquelles?

    Quelle est la valeur de $routes? Et celle de $router une fois qu'il est rempli?

  3. #3
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Par défaut Les erreurs
    Salut.

    Si tu télécharge mon projet et que tu essayes de lire un billet, on obtient cette erreur :
    TRUE

    array(0) {
    }


    Fatal error: Call to a member function getName() on a non-object in C:\wamp\www\SiteSylvainPOO\Applications\Frontend\Modules\Blog\BlogController.class.php on line 44

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Hello,

    J'ai téléchargé les fichiers mais je ne suis pas allé jusqu'à le tester.

    Le fichier BlogController.class.php que j'ai (issu de SiteSylvainPOO.zip) s'arrête à la ligne 33, donc je ne vois pas d'où vient ton erreur qui se réfère à la ligne 44.

    Ton erreur veut dire aussi que le problème n'est pas dans ta méthode getController, puisque le controlleur est bien appelé. Poste ici (dans un message, pas dans un fichier zip stp) le contenu de BlogController.class.php.

  5. #5
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Par défaut $vars : la clé existe !
    Salut !

    En ajoutant la ligne echo $route->getAttribut('vars'), il m'affiche bien "id" ^^

  6. #6
    Membre habitué
    Homme Profil pro
    Lycéen
    Inscrit en
    Novembre 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Lycéen
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2013
    Messages : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    <?php
    namespace Applications\Frontend\Modules\Blog;
     
    class BlogController extends \Library\BackController
    {
    	public function executeIndex(\Library\HTTPRequest $request)
    	{
    		$billetsNumber = $this->getApp()->getConfig()->get('billets_number');
    		$caractersNumber = $this->getApp()->getConfig()->get('caracters_number');
    		$serverName = $this->getApp()->getConfig()->get('server_name');
    		$serverIp = $this->getApp()->getConfig()->get('server_ip');
     
    		$this->getPage()->addVar('name', 'Liste des ' .$billetsNumber.' derniers billets');
     
    		$manager = $this->managers->getManagerOf('Blog');
     
    		$billetsList = $manager->getList(0, $billetsNumber);
     
    		foreach ($billetsList as $billet)
    		{
    			if (strlen($billet->getContent()) > $caractersNumber)
    			{
    				$begin = substr($billet->getContent(), 0, $caractersNumber);
    				$begin = substr($begin, 0, strrpos($begin, ' ')) . '...';
     
    				$billet->setContent($begin);
    			}
    		}
     
    		$this->getPage()->addVar('billetsList', $billetsList);
    		$this->getPage()->addVar('serverIp', $serverIp);
    		$this->getPage()->addVar('serverName', $serverName);
    	}
     
    	public function executeShow(\Library\HTTPRequest $request)
    	{
    		$billet = $this->managers->getManagerOf('Blog')->getUnique($request->getData('id'));
     
    		if(empty($billet))
    		{
    			echo $request->getData('id');
    		}
     
    		$this->getPage()->addVar('name', $billet->getName());
    		$this->getPage()->addVar('billet', $billet);
    	}
    }
    Voici le contenu de BlogController.class.php

  7. #7
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Ok, ça veut dire que l'id n'est pas transmis au contrôleur dans executeShow
    - première question bête, tu mets bien un id numérique dans l'url?
    - Il faudrait voir si la valeur est bien transmise. Est-ce que la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(empty($billet)) {
    			echo $request->getData('id');
    	}
    est appelée ? Sinon, remplace-la par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(!$billet instanceof Library\Entities\Billets) {
       var_dump($billet);
    exit;
    }
    Ça permettra de voir quelle valeur $billet prend.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/10/2012, 12h42
  2. Assigner a une variable une valeur lue dans un fichier texte
    Par mapotam dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 22/12/2009, 15h46
  3. PHP non interprété dans un fichier XML
    Par Peyothe dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 03/06/2009, 21h43
  4. [Properties] Mise a jour de variable de config dans un fichier
    Par tripop dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 03/02/2005, 12h28
  5. [Servlet] Erreur dans le fichier web.xml
    Par Crazyblinkgirl dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 05/07/2004, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo