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

MVC PHP Discussion :

_redirect Vs _forward


Sujet :

MVC PHP

  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 17
    Par défaut _redirect Vs _forward
    Salut à tous!désolé de remplir des messages mais je suis sur mon premier projet et je bute depuis près d'une semaine voire deux. Alors voilà mon problème.depuis un controller je veux passer un paramètre à un autre controller. Une solution qui m'a été proposée consistait à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_forward('index', 'main',null, array('page'=>'saisir','cli'=>$cli));
    par cela je récupère bien le paramètre 'cli' dans la page(controller) 'saisir' mais malheureusement je perds mon layout en d'autres termes le rendu de la vue 'saisir.phtml' se fait hors du layout. Mais si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_redirect('main?page=saisir',array('cli'=>$cli));
    alors la vue 'saisir.phtml' est bien présente dans le layout mais pas le paramètre 'cli'. Aussi mes questions sont nombreuses et je m'embrouille à la fin
    1) avec _redirect puis-je passer des paramètres tels que fais là?sinon comment?
    2)_forward semble approprié mais pourquoi mon gabarit est-il perdu?
    Merci à tous pour votre aide là vraiment je coince....

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    et tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->_redirect('/index/main/page/saisir/cli/'.$cli);
    Controller : index
    Action : main
    Paramètre page : saisir
    Paramètre cli : $cli

    tu peux aussi utiliser le redirector

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    $redirector = $this->_helper->getHelper('Redirector');
    $redirector->gotoSimple('main','index',null,
                                           array('page' => 'saisir',
                                                 'cli' => $cli));

  3. #3
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 17
    Par défaut
    Merci MaîtrePylos en fait je n'avais pas testé la première proposition donc je me suis empressé de la tester mais rien toujours pas de layout. Bien-sûr la vue est rendue mais hors du layout. Pour la deuxième je l'avais testée mais rien aussi. Donc je suis encore là.
    Ps: Controller : main
    Action : index
    Paramètre page : saisir
    Paramètre cli : $cli

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    montre nous ton layout et application.ini et le bootstrap

  5. #5
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 17
    Par défaut
    Bonjour et merci!voilà mon layout
    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
    <?php
    echo '<?xml version="1.0" encoding="UTF-8" ?>';
    echo $this->doctype();
    ?>
    <html>
    <head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    	<?php
    		echo $this->headTitle();
    		echo $this->headScript();
    		// add a link to the site style sheet
    		$this->loadSkin($this->skin);
    		echo $this->headLink();
    	?>
    </head>
    <body>
    	<div id="pageWrapper">
    		<div id="header">
    			<h1></h1>
    		</div>
    		<div id="menu">
    			<?php echo $this->action('index','menu');
    			echo $this->layout()->form;?>&nbsp; 
    		</div>
    		<div id="main">
    		    <?php echo $this->layout()->content;?>&nbsp;
    		</div>
    		<div id="footer">
    			<p><em>Copyright by GELODIA!</em></p>
    		</div>
    	</div>
    </body>
    </html>
    mon application.ini est
    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
    [production]
    phpSettings.display_startup_errors = 0
    phpSettings.display_errors = 0
    includePaths.library = APPLICATION_PATH "/../library"
    bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
    bootstrap.class = "Bootstrap"
    appnamespace = "Application"
    resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
    ;resources.frontcontroller.baseUrl = "/GestComGelodia/public"
    resources.frontController.params.displayExceptions = 0
    ;resources.view[] =
    resources.layout.layout = "layout"
    resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
    resources.db.adapter = "pdo_mysql"
    resources.db.params.host = "localhost"
    resources.db.params.username = "yves"
    resources.db.params.password = "frederic"
    resources.db.params.dbname = "gelodiacrm"
    resources.db.isDefaultTableAdapter = true
     
    [staging : production]
     
    [testing : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
     
    [development : production]
    phpSettings.display_startup_errors = 1
    phpSettings.display_errors = 1
    resources.frontController.params.displayExceptions = 1
    et mon bootstrap est
    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
    <?php
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
     
     protected function _initView()
    	{
    		// Initialize view
    		$view = new Zend_View();
    		$view->doctype('XHTML1_STRICT');
    		$view->headTitle('Application de gestion commerciale de Gelodia');
    		$view->skin = 'blues';
    		// Add it to the ViewRenderer
    		$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer');
    		$viewRenderer->setView($view);
    		// Return it, so that it can be stored by the bootstrap
    		return $view;
    		}
    protected function _initAutoload()
    	{
    		// Add autoloader empty namespace
    		$autoLoader = Zend_Loader_Autoloader::getInstance();
    		$autoLoader->registerNamespace('gelodia_');
    		$resourceLoader = new Zend_Loader_Autoloader_Resource(array(
    		'basePath' => APPLICATION_PATH,
    		'namespace' => '',
    		'resourceTypes' => array(
    		'form' => array(
    		'path' => 'forms/',
    		'namespace' => 'Form_',
    		),
    		'model' => array(
    		'path' => 'models/',
    		'namespace' => 'Model_'
    		),
    		),
    		));
    		// Return it so that it can be stored by the bootstrap
    		return $autoLoader;
    	}
     
     
     
     
    }
    cependant je vous ajoute aussi ma logique d'affichage dans le layout. J'ai un contrôleur "main" qui reçoit le paramètre 'page' depuis la vue 'menu' (on voit qu'elle comporte donc mon menu). "main" affiche donc la vue correspondante au contrôleur qui n'est autre que la valeur de 'page'
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    <?php
     
    class MainController extends Zend_Controller_Action
    {
     
        public function init()
        {
            /* Initialize action controller here */
        }
     
        public function indexAction()
        {
            // action body
            //$layout = Zend_Layout::getMvcInstance();
        	//$layout->setLayout('layout');
            $page = $this->_getParam('page');
            if($page=='vendeur'){
            	//$this->view->layout()=$this->view->action('index','formulaire');
            	$this->view->layout()->main=$this->view->action('index','vendeur');
            }
        if($page=='acheteur'){
            	//$this->view->layout()=$this->view->action('index','formulaire');
            	$this->view->layout()->main=$this->view->action('index','acheteur');
            }
        if($page=='prestationsimple'){
            	//$this->view->layout()=$this->view->action('index','formulaire');
            	$this->view->layout()->main=$this->view->action('index','prestationsimple');
            }
        if($page=='confirme'){
            	//$this->view->layout()=$this->view->action('index','formulaire');
            	$this->view->layout()->main=$this->view->action('index','confirme');
            }
        if($page=='valide'){
            	//$this->view->layout()=$this->view->action('index','formulaire');
            	$this->view->layout()->main=$this->view->action('index','valide');
            }
        if($page=='facture'){
            	//$this->view->layout()=$this->view->action('index','formulaire');
            	$this->view->layout()->main=$this->view->action('index','facture');
            }
        if($page=='imprimeress'){
     
            	$this->view->layout()->main=$this->view->action('index','imprimeress');
            }
        if($page=='imprimerproforma'){
     
            	$this->view->layout()->main=$this->view->action('index','imprimerproforma');
            }
        if($page=='imprimerfacture'){
     
            	$this->view->layout()->main=$this->view->action('index','imprimerfacture');
            }
        if($page=='imprimercontrat'){
     
            	$this->view->layout()->main=$this->view->action('index','imprimercontrat');
            }
        if($page=='enregistrereg'){
     
            	$this->view->layout()->main=$this->view->action('index','enregistrereg');
            }
        if($page=='modifierprest'){
     
            	$this->view->layout()->main=$this->view->action('index','modifierprest');
            }
        if($page=='devaliderprest'){
     
            	$this->view->layout()->main=$this->view->action('index','devaliderprest');
            }
        if($page=='abandonnerprest'){
     
            	$this->view->layout()->main=$this->view->action('index','abandonnerprest');
            }
        if($page=='annulerprest'){
            	$this->view->layout()->main=$this->view->action('index','annulerprest');
            }
        if($page=='saisir'){        	 
            	$cli = $this->_getParam('cli');
            	$num = $this->_getParam('num'); 
            	$this->view->layout()->main=$this->view->action('index','saisir',null,array('cli'=>$cli,'num'=>$num));
            }
        }
     
     
    }
    jusqu'ici tout se passait bien sauf pour le dernier en effet là j'ai donc le rendu de la vue 'index' sans le layout . Merci

  6. #6
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Avez-vous essayer sans les paramètres.

  7. #7
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 17
    Par défaut
    Bonjour et merci à tous et à toi surtout MaitrePylos. Je viens d'essayer sans les paramètres et là bien-sûr la redirection est hors du layout donc rien ne fait. Cependant si j'utilise un "render" je suis bien redirigé et mon layout est conservé mais comment dans un render peut-on passer des paramètres et les récupérer sans problème?

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Normalement le passage classique de variable devrais fonctionner !

  9. #9
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 17
    Par défaut
    Salut MaîtrePylos! Par passage classique vous entendez?je ne vois pas c'est le pourquoi de ma question....merci

  10. #10
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $this->view->cli = $cli;

  11. #11
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 17
    Par défaut
    j'ai utilisé cette commande une fois mais c'était pour passer une d'un controller à une vue mais ici je pars d'un controller vers un autre controller d'où la redirection...alors dans ce cas la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->view->cli = $cli;
    marcherait-elle?c'est pas sûr mais je voudrais juste confirmation pour compréhension.Merci

  12. #12
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    non ça ne marchera pas.

    Bon alors pour passer d'un controller à l'autre pourquoi ne pas utiliser une session ?

  13. #13
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 17
    Par défaut
    bien la vérité c'est que je n'y connais rien en sessions!donc est-ce possible par là?comment procède t-on?y a t-il des tutoriels pouvant me conduire via un step by step à la mise en place des sessions?voilà les interrogations qui me viennent comme ça du coup! Merci bcp MaîtrePylos et à tous

  14. #14
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Rapidement

    Pour mettre en session dans Zend Framework

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $session = new Zend_Session_Namespace();
     
    $session->cli = $cli
    Pour récupérer dans l'autre controller.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $session = new Zend_Session_Namespace();
     
    $cli = $session->cli;
    Simple....non ?

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/01/2009, 23h46
  2. [ZF 1.7] Comment fonctionne le _forward ?
    Par oliviercuyp dans le forum MVC
    Réponses: 9
    Dernier message: 16/12/2008, 17h09
  3. _forward fait (presque) planter Apache
    Par nicolas54 dans le forum MVC
    Réponses: 6
    Dernier message: 10/10/2008, 17h57
  4. Utilisation de _redirect
    Par littleman dans le forum MVC
    Réponses: 3
    Dernier message: 07/10/2008, 18h35
  5. $this->_redirect() - Erreur bizarre
    Par Eleyone dans le forum Zend Framework
    Réponses: 2
    Dernier message: 11/09/2008, 14h17

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