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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

Discussions similaires

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

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