0

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

我认为通过 POST 将数据发送到第二个函数,我不打算在不使用表单的情况下发送 POST 数据知识。

你能帮助我吗?

对不起我的英语不好

控制器1:

类 DeviceController 扩展控制器 {

 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 扩展控制器 {

  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

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

于 2012-12-05T19:47:12.660 回答
0

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

于 2013-10-05T08:10:46.680 回答