如何将隐藏数据发送到Yii上的另一个控制器操作

时间:2012-12-05 12:59:30

标签: yii-extensions yii yii-components yii-events

我不知道如何将控制器1的函数(动作)中的隐藏数据发送到yii中Controller2的函数(动作)。

我认为通过POST将数据发送到第二个功能,我不打算在不使用表单的情况下发送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,
        ));
   }  }

这就是我要做的,但它不起作用!

3 个答案:

答案 0 :(得分:2)

最后,我找到了解决问题的方法。

要将数据隐藏功能(动作)controller1发送到函数(动作)Controller2,我创建了一个包含controler1函数中隐藏数据的会话,我在Controller2的函数中得到了这个会话。

我按照以下教程创建会话: http://www.larryullman.com/2011/05/03/using-sessions-with-the-yii-framework/

答案 1 :(得分:1)

我手边看到的一件事是你静态调用你的方法,但方法是一个成员函数。应该是公共静态函数messageAutoComplete是正确的。另外我注意到从控制器调用控制器在Yii中不起作用。你真的应该在组件目录中添加一个帮助器类。你甚至可以从你的组件扩展你的控制器,如果你不想让它成为一个静态的方法,所以它会被称为$ this-> messageAutoComplete(params)

答案 2 :(得分:0)

此外,您可以通过调用控制器上的renderpartial并在同一控制器中将所有数据发送到两个视图文件,获取支持的数据并在相关操作中处理它们。