Yii2:如何访问_POST方法数据


Yii2: How to access _POST method data

将表单数据从一个操作发送到另一个操作

<?php $form = ActiveForm::begin(['action' =>'site/roomsearch','method' => 'post']); ?>
<?= $form->field($model, 'arrival')->label(false) ?>
<?= $form->field($model, 'departure')->label(false) ?>
<?= Html::submitButton('Send', ['class' => 'btn btn-white']) ?>
<?php ActiveForm::end(); ?>

索引页具有上述形式,从中将数据发送到actionRoomsearch()

actionindex():

 public function actionIndex()
    {
        $model = new 'yii'base'DynamicModel(['arrival','departure','adult','child']);
                if($model->load(Yii::$app->request->post()))
            {
                $arrival = $model->arrival;
                $departure = $model->departure;
                return $this->redirect([
                              'roomsearch',
                              'arrival' => $arrival ,  
                              'departure' => $departure
                            ]);
            }
        return $this->render('index', ['model'=>$model]);
    }

动作室搜索():

{
        $post = Yii::$app->request->post();
        $arrival = $post['arrival'];
        $departure = $post['departure'];
        return $this->render('roomsearch',[
              'arrival' =>$arrival,
            'departure' => $departure,
            ]);
    }

如何在页面中显示arrivaldeparture roomsearch

使用'yii'base'DynamicModel创建模型

由于您从一个操作重定向到另一个操作,因此无法访问第二个操作中的 POST 数据。但是您可以将其作为获取参数传递

return $this->redirect('yii'helpers'Url::to([
     '/you_controller/your_action',
     'arrival' => $arrival ,  
     'departure' => $departure
]));

在您的第二个操作中

$arrival = yii::$app->request->get('arrival');
$departure = yii::$app->request->get('departure');

使用动态模型,因为无需将数据保存在数据库中

public function actionIndex()
    {
        $model = new 'yii'base'DynamicModel(['arrival','departure']);
        $model->addRule(['arrival', 'departure'], 'string', ['max' => 128]);
        $arrival = $model->arrival;
              if($model->load(Yii::$app->request->post()))
            {
                $arrival = $model->arrival;
                $departure = $model->departure;
                $model->save(); 
            }
        return $this->render('index', ['model'=>$model]);
    }

在操作中获取 POST 方法数据房间搜索

public function actionRoomsearch()
    {
        $data = yii::$app->request->post();
        if(isset($data['DynamicModel'])) 
        { 
            $arrival = $data['DynamicModel']['arrival']; 
            $departure = $data['DynamicModel']['departure'];
        }
        return $this->render('roomsearch',['arrival' =>$arrival,'departure' => $departure]);
    }

在第 <?php echo $arrival; ?> 页上显示数据

因为这是两个请求之间的通信。我更喜欢使用闪存

注意:闪存将在下次请求后自动删除。

public function actionIndex()
{
     $model = new 'yii'base'DynamicModel(['arrival', 'departure', 'adult', 'child']);
    if($model->load(Yii::$app->request->post()))
    {
        Yii::$app->session->setFlash('arrival', $model->arrival);
        Yii::$app->session->setFlash('departure', $model->departure);
        return $this->redirect(['roomsearch']);
    }
    return $this->render('index', ['model'=>$model]);
}

在房间搜索页面中

public function actionRoomSearch()
{
    $session = Yii::$app->session;
    $arrival = $session->hasFlash('arrival') ? $session->getFlash('arrival') : null;
    $departure = $session->hasFlash('departure') ? $session->getFlash('departure') :null;
    //Do whatever you like with the data
}

我更喜欢这种方法而不是 _GET 美元的原因是因为有时您必须通过页面发送安全敏感数据而您不需要的地方希望它在浏览器的地址栏中显示。例如,张贴在隐藏字段中的 ID。