0

yiiでcontroller1の関数(アクション)からController2の関数(アクション)に隠しデータを送信する方法がわかりません。

POSTで2番目の機能にデータを送信すると思いますが、フォームを使わずにPOSTデータのノウハウを送信することは目指していません。

手伝って頂けますか?

私の英語でごめんなさい

Controller1:

クラスDeviceControllerはControllerを拡張します{

 public function actionDeviceTurnOn(){

     if(isset($_GET['id_device'])){

         $id_device = $_GET['id_device'];

         $model = $this->loadModel($id_device);
         $model->status = 1;

         $title = "Message of admin";

         $message = "Good morning" . "\r\n" .
                     "\r\n" . 
                     "The device is On";


         MessagesController::messageAutoComplete(Yii::app()->user->id, 
           $_GET['id_user'], $title, $message);                                  

     } 
  }  } ?>

コントローラー2:

クラスMessagesControllerはControllerを拡張します{

  public function messageAutoComplete($from_user_id=null, $to_user_id=null,
  $title=null, $message=null){

        $data['from_user_id'] = $from_user_id;
        $data['to_user_id'] = $to_user_id;
        $data['title'] = $title;
        $data['message'] = $message;

        MessagesController::actionCompose($data);        
  }


  public function actionCompose ($data=null)
  {
        $model=new Messages;

        $this->performAjaxValidation($model);

        if(isset($_POST['Messages']))
        {
          foreach($_POST['Messages']['to_user_id'] as $user_id) {
              $model = new Messages;
              $model->attributes=$_POST['Messages'];
              $model->to_user_id = $user_id;
              $model->save();
          }
              $this->redirect(array('success'));
        }

        $model->to_user_id = "";

        if($data != null){

             $model->from_user_id = $data['from_user_id'];
             $model->to_user_id = $data['to_user_id'];
             $model->title = $data['title'];
             $model->message = $data['message'];
        }

        $this->render('compose',array(
           'model'=>$model,
        ));
   }  }

これは私がすることですが、機能しません!

4

3 に答える 3

2

最後に、私は自分の問題の解決策を見つけました。

データ隠し関数(アクション)コントローラー1を関数(アクション)コントローラー2に送信するために、コントローラー1の関数に隠しデータを含むセッションを作成し、コントローラー2の関数でこのセッションを取得します。

次のチュートリアルに従ってセッションを作成しました: http ://www.larryullman.com/2011/05/03/using-sessions-with-the-yii-framework/

于 2012-12-06T09:40:22.310 に答える
1

私がすぐに目にすることの1つは、メソッドを静的に呼び出しているが、メソッドはメンバー関数であるということです。適切であるためには、public staticfunctionmessageAutoCompleteである必要があります。また、コントローラーからコントローラーを呼び出すことはYiiでは機能しないことに気づきました。コンポーネントディレクトリ内にヘルパークラスを追加する必要があります。静的メソッドにしたくない場合は、コンポーネントからコントローラーを拡張して、$ this-> messageAutoComplete(params)のように呼び出すこともできます。

于 2012-12-05T19:47:12.660 に答える
0

また、コントローラーでrenderpartialを呼び出して、すべてのデータを両方のビューファイルに送信し、同じコントローラーでバックアップされたデータを取得して、関連するアクションで処理することもできます。

于 2013-10-05T08:10:46.680 に答える