簡體   English   中英

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]);
    }

actionroomsearch():

{
        $post = Yii::$app->request->post();
        $arrival = $post['arrival'];
        $departure = $post['departure'];

        return $this->render('roomsearch',[
              'arrival' =>$arrival,
            'departure' => $departure,
            ]);
    }

如何在roomsearch頁面顯示arrivaldeparture

使用\\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]);
    }

在actionRoomsearch中獲取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; ?>上的數據<?php echo $arrival; ?> <?php echo $arrival; ?>

由於這是兩個請求之間的通信。 我更喜歡使用Flash

注意:下一個請求后,Flash會自動刪除。

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM