2010-11-24 24 views
0

別のコントローラで関数を呼び出す必要があります。たとえば、ユーザーが間違ったパラメータでログインしようとすると、アプリケーションは別のコントローラにリダイレクトされ、変数(配列)を渡します。コードイグナイターの別のコントローラーで関数を呼び出す方法は?

class User extends Controller { 

function User() 
{ 
    parent::Controller(); 
} 

function doLogin() 
{ 
    $userData = $this->users->getAuthUserData($user,$password); 
    if(empty($userData)){ 
    // this is where i need to call a function from another controller 
    }else{ 
    echo 'logged in'; 
    } 
} 

} 

urlヘルパーでredirect()関数を使用して変数を渡すことは可能ですか?

答えて

0
<?php  
$array = array('foo'=>'bar', 'baz'=>'fubar', 'bar' => 'fuzz'); 

    $json = json_encode($array); 

    $encoded_json= urlencode($json); 
    /* now pass this variable to your URL redirect) 

    /* on your receiving page:*/ 
    $decoded_json= urldecode($encoded_json); 

    /* convert JSON string to an array and output it */ 
    print_r(json_decode($decoded_json, true)); 
?> 

このコード:

は、JSONエンコードされた文字列に変換し、配列をとります。

次に、url_encodeを使用して$json文字列をエンコードします。これはURL経由で渡すことができます。

このURLをデコードし、JSONオブジェクトを結合配列としてデコードします。

はあなたが別のコントローラから1つのコントローラの機能を呼び出したい場合、あなたはヘルパーをリダイレクト使用することができますしてみてください

+0

合意:配列の場合JSONとurlencodingは間違いなく最良の選択です。 – Knossos

+0

OK ..私はそれを試してみる..ありがとう.. http urlの長さの任意の制限はありますか? – ariawan

2

はい、redirect( 'othercontroller/function /'。url_encode($ data)、 'location');を使用できます。

これでうまくいくはずです。

編集:コードをヘルパーに入れることもできます。

+0

$ dataが配列の場合は可能ですか? – ariawan

+0

'urlencode'(アンダースコアなし)は文字列を必要とするので、配列は機能しません。可能な解決策について私の答えを見てください。 – Ross

0

価値があるかもしれません。例えば

class Logout extends CI_Controller { 

    function index() {  
     session_destroy(); 
     redirect('index.php/home/', 'refresh'); 
    } 

} 

、それは別のcontollerを呼び出します。

関連する問題