2010-12-13 7 views
1

$this->set()と渡したデータを、データ設定後に別のページにリダイレクトすると表示できますか?あなたがheader('Location: ...')にリダイレクトcakephpリダイレクト後にデータを渡す

おかげで、 EL

+0

となります。達成しようとしていることは何ですか?どういうわけか、リダイレクトのためにユーザーが決して見ることのできないデータを表示するのはあまり意味がありません。 – dhofstet

+0

ユーザーが – Elwhis

答えて

5

おそらく最も簡単な方法は、とのセッションにデータを格納することです

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

?これにより、ブラウザは新しい要求を開始します。リダイレクションをトリガしたスクリプトは、新しいリクエストを処理するスクリプトと同じでもかまいませんが、2つのインスタンスが実行されています(または最初のインスタンスが終了している可能性もあります)。データをどこにでも保存するか(セッション、共有メモリなど)、最初のリクエストと同じ方法で再構築するか、2番目のリクエストを発行せずに内部的に別のアクション/ビューにリダイレクトします。

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

として、後でそれを読むために:

4

あなた超えるが場合に述べたようにあなたがセッションを使用することができますディスパッチャオブジェクトを使用できるセッションにデータを保存したくない場合は、ここに例を示します。私はそれがlooong時間となっている知っているが、私もこの問題を抱えていたし、これは私がそれを解決する方法であることに有用..

$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にリダイレクトされたページでデータを表示したいと思います。 – RabidFire

1

を見つけます。 CakePHPはcontroller->派遣の定義は

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

コードでの説明は

言ったように代わりにあなたが

$this->requestAction 

を使用することができているので、Introgyが提供するソリューションが動作しません2.3.5については

/** 
* 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. 
*/ 

だからIntrogy例のように変更されるだろうの

あなたのデータは、ターゲットのデータに利用できるようになります:

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

actionOnThatControllerためのビューがレンダリングされます。

EDIT: 私はこれを追加するのを忘れ、$余分として渡された配列のキー「リターン」を追加する必要があるレンダリングするターゲットビューのために、そしてあなたがターゲットとアクションのビューをレンダリングする必要があり、完全な正しい修正は

$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'); 
関連する問題