Как отправить скрытые данные на другой контроллер действия на Yii
Я не знаю, как отправить скрытые данные из функции (действия) контроллера1 в функцию (действие) контроллера2 в yii.
Я думаю, что отправляя данные во вторую функцию с помощью 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 extends 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 ответа
Наконец-то я нашел решение своей проблемы.
Чтобы отправить данные скрытой функции (действие) controller1 в функцию (действие) Controller2, я создал сеанс, который содержит скрытые данные в функции контроллера1, и я получаю этот сеанс в функции контроллера2.
Для создания сеанса я следовал следующему руководству: http://www.larryullman.com/2011/05/03/using-sessions-with-the-yii-framework/
Сразу видно, что вы вызываете свой метод статически, но этот метод является функцией-членом. Должна быть публичная статическая функция messageAutoComplete, чтобы быть правильной. Также я заметил, что вызов контроллеров из контроллера не работает в Yii. Вы действительно должны добавить, что это вспомогательный класс внутри вашей директории компонентов. Вы даже можете расширить свой контроллер из своего компонента, если не хотите делать его статическим методом, поэтому он будет называться как $this->messageAutoComplete(params)
Кроме того, вы можете отправить все данные в оба файла представления, вызвав renderpartial на контроллере, и в том же контроллере взять сохраненные данные и обработать их в соответствующем действии.