2009-12-07 8 views
0

Actuellement, je crée un contrôleur (ZendFramework) qui obtient de la base de données une chaîne URL par ID donné.Transférer à une chaîne d'URL donnée

/linker/show/id/6

à savoir id=6/products/list/type/games.

Dans LinkerController je voudrais utiliser _forward() méthode pour passer également en option params (POST, GET), mais cette méthode prend des paramètres tels que ($action, $controller, $module, $params) et ma chaîne /products/list/type/games droite est maintenant pas valide.

Je ne veux pas non plus rediriger vers cette URL (l'utilisateur ne devrait pas voir qu'il est dans ProductController).

Des idées pour le résoudre?

Répondre

1

Vous ne pouvez pas transférer vers l'URL (en raison de la nature de la transmission - création d'un nouvel objet de demande interne). Vous pouvez seulement transmettre à la demande (module, contrôleur, action).

Utilisation redirection insted (Contrôleur):

$this->_helper->redirector->gotoUrlAndExit($url); 
+0

Rediriger n'est pas la bonne façon - comme je l'ai dit, je préfère ne pas montrer à l'utilisateur une URL de destination. – hsz

+1

alors vous devez transmettre à la demande - pas l'URL. c'est-à-dire: module, contrôleur, action, params comme vous l'avez écrit ci-dessus. Il n'y a AUCUN AUTRE MODE. Vous ne pouvez pas transmettre à l'URL (ce n'est pas nécessaire, pour être honnête). –

1

Ceci est délicat. Vous voulez un mash-up entre une redirection et un forward.

Travailler en arrière:

  1. Vous devez appeler $ this -> _ avant ($ action, $ controller, $ module, $ params)

  2. Donc, vous devez stocker ces quatre paramètres dans votre table de liens ($ params seraient sérialisé)

Ensuite, votre code de linker peut ressembler à:

public function showAction() 
{ 
    $linker_table = new LinkerTable(); 
    $link = $linker_table->find(array('id' => $this->_getParam('id'))); 

    // first, try to forward, if all settings are there 
    if ($link && $link->hasForwardSettings()) { 
    $this->_forward($link->action, $link->controller, $link->module, unserialize($link->params)); 
    return; 
    } 

    // perhaps other links can just be straight redirects, so then $this->_redirect($link->url) 
} 

Soit cela ou une magie mod_rewrite.

+0

De cette façon, je dois définir séparément tous les paramètres: 'action, controller et module'. Y at-il un moyen de définir une seule URL '/ products/list/type/games' et de l'exploser à ces 3 paramètres? Toute méthode ZF magique? ;) – hsz

Questions connexes