2010-12-13 9 views
1

Kann ich Daten anzeigen, die ich mit $this->set() übergebe, wenn nach der Dateneinstellung eine Weiterleitung zu einer anderen Seite erfolgt?cakePHP Daten weiterleiten, um nach Umleitung anzuzeigen

Danke, EL

+0

Was versuchen Sie zu erreichen? Irgendwie macht es wenig Sinn, Daten anzuzeigen, die der Benutzer aufgrund der Weiterleitung nie sehen wird ... – dhofstet

+0

Ich möchte die Daten auf der Seite anzeigen, die der Benutzer an – Elwhis

Antwort

5

Wahrscheinlich ist der einfachste Weg, mit den Daten in der Sitzung zu speichern:

$this->Session->write('key', 'value'); 

und es zu lesen später mit:

$this->Session->read('key'); 
0

Sie mit header('Location: ...') umleiten? Dadurch startet der Browser eine neue Anfrage. Das Skript, das die Umleitung ausgelöst hat, kann dasselbe wie das sein, das die neue Anfrage bearbeitet, aber es laufen jetzt zwei Instanzen (oder die erste kann sogar beendet werden) und jeder hat keinen Zugriff auf die Variablen der anderen. Entweder speichern Sie die Daten an einer beliebigen Stelle (Sitzung, gemeinsam genutzter Speicher, ...) oder Sie erstellen sie auf die gleiche Weise neu wie in der ersten Anforderung oder Sie geben einfach keine zweite Anforderung aus, sondern leiten sie intern zu einer anderen Aktion/Ansicht um.

4

Sie die Sitzung oben, aber wenn Sie wie erwähnt verwenden können möchte nicht die Daten in einer Sitzung speichern Sie könnten das Dispatcher-Objekt verwenden, hier ist ein Beispiel. Ich finde es nützlich ..

$login['Login']['username'] = $username; 
    $login['Login']['password'] = $password; 

    $this->autoRender = false; 
    $d = new Dispatcher(); 
    $d->dispatch( 
     array("controller" => "users", "action" => "login"), 
     array("data" => $login) 
    );     
+0

+1 für die einzigartige Alternative umleitet. – RabidFire

1

Ich weiß, dass es an der Zeit ist laaange aber ich hatte auch dieses Problem und das ist, wie ich es lösen. Was CakePHP 2.3.5 die von Introgy bereitgestellte Lösung wird, da die Definition für Controller- nicht funktionieren> Versand ist

public function dispatch(CakeRequest $request, 
         CakeResponse $response, $additionalParams = array()) 

stattdessen Sie

$this->requestAction 

Wie die Erklärung im Code sagte

verwenden können

:
/** 
* Calls a controller's method from any location. Can be used to connect 
*controllers together 
* or tie plugins into a main application. requestAction can be used to 
*return rendered views 
* or fetch the return value from controller actions. 
* 
* Under the hood this method uses Router::reverse() to convert the $url 
*parameter into a string 
* URL. You should use URL formats that are compatible with 
*Router::reverse() 
* 
* #### Passing POST and GET data 
* 
* POST and GET data can be simulated in requestAction. Use 
*`$extra['url']` for 
* GET data. The `$extra['data']` parameter allows POST data simulation. 
* 
* @param string|array $url String or array-based URL. Unlike other URL 
*arrays in CakePHP, this 
* URL will not automatically handle passed and named arguments in the 
*$url parameter. 
* @param array $extra if array includes the key "return" it sets 
*theAutoRender to true. Can 
* also be used to submit GET/POST data, and named/passed arguments. 
* @return mixed Boolean true or false on success/failure, or contents 
* of rendered action if 'return' is set in $extra. 
*/ 

so Introgy würde beispielsweise modifiziert werden

class YourTargetControllerController extends PlugInIfThereIsAppController 
{ 
    public function actionOnThatController() 
    { 
    $this->data; //will be having ['Login']['username'] = $username 
       //      ['password'] = $password 
    } 
} 

und die Aussicht für actionOnThatController werden gerendert:

Ihre Daten werden in das Ziel der Daten zur Verfügung stehen.

EDIT: ich diese hinzuzufügen vergessen, für die Zielansicht der Taste ‚Rückkehr‘ im Array als $ zusätzliche geben hinzuzufügen ist es notwendig gemacht werden, dann müssen Sie die gezielte Aktion Sicht machen, Daher wäre die vollständige korrekte Änderung

$login['Login']['username'] = $username; 
$login['Login']['password'] = $password; 
$url = array('plugin'  => 'plug_in_if_there_is', 
      'controller' =>'your_target_controllers', 
      'action'  =>'actionOnThatController'); 

$this->requestAction($url, array('return', 'data' => $login)); 
$this->render('PlugInIfThereIs.YourTargetControllers/action_on_that_controller'); 
Verwandte Themen