$post = Yii::$app->request->post(); $post_modelu = $post['nazwa klasy modelu'];
W kontrolerze deklarujemy zmienne globalne i nadajemy im odpowiednie wartości
class PomiocController extends \yii\web\Controller { public $nr_menu = 1; public $nr_opcji; public function actionIndex() { $this->nr_opcji = 10; $model = Pomoc::find() ->where(['publikacja' => 1]) ->andWhere(['>', 'status', 0]) ->all(); ...
W layoucie (main.php)
<?= isset($this->context->nr_menu) ? $this->context->nr_menu:'-' ?> <?= isset($this->context->nr_opcji) ? $this->context->nr_opcji:'-' ?>
Używając Helpera Html można za pomocą zwykłego odnośnika przekazać dowolne dane metodą POST. Przykład:
echo Html::a( 'Tekst odnośnika', ['/test/view','id'=>1], ['data' => ['method' => 'post'] ]);
Powyższy przykład tworzy odnośnik przesyłający do test/view parametr name o wartości zmiennej $wartosc metodą POST. Dostęp do tego parametru w akcji controllera jest identyczny jak dla metody GET.
aby uniemożliwić przesyłanie danych metodą GET W kontrolerze należy dodać:
public function behaviors() { return [ 'verbs' => [ 'class' => VerbFilter::className(), 'actions' => [ 'delete' => ['POST'], 'view' => ['POST'], ], ], ]; } public function actionView($id) { return $id; }
Zalety:
można przesyłać duże ilości danych w bezpieczny sposób
Uwaga !
w GridView format atrybutu w którym będzie powyższy odnośnik : 'format' ⇒ 'raw'
['attribute' => 'test', 'label' => 'Prześlij', 'format' => 'raw', 'value' => function ($model) { return Html::a('Wykonaj', ['/controller/akcja'], [ 'title' => 'Podpowiedź ...', 'data' => [ 'method' => 'post', 'params' => [ 'par1' => $model->id_p1, 'par1' => $model->id_p2, 'par3' => $model->id_p3 ] ] ]); }, ],
Yii::$app->session->setFlash('success', "Komunikat.");
redirpost.php
<?php use yii\widgets\ActiveForm; ?> <?php $form = ActiveForm::begin([ 'id'=>'redir_form', 'action'=>$url ]); ?> <input type="hidden" name="_csrf" value="<?= Yii::$app->request->getCsrfToken() ?>" > <?php foreach ($data as $key => $value): ?> <input type="hidden" name="<?= $key ?>" value="<?= $value ?>" > <?php endforeach; ?> <i class="fas fa-spinner text-danger" style="font-size:5em"></i> <?php ActiveForm::end(); ?> <?php $this->registerJs(" $('#redir_form').submit() ");
$url = '/podania/podglad'; $data = json_encode(['id' => $id_podania_realizacja]); return $this->redirect(['/podania/redirpodglad', 'url' => $url, 'data' => $data]);
RedirpostWidget.php
<?php namespace common\widgets\redirpost; use yii; use yii\base\Widget; use yii\helpers\Url; class RedirpostWidget extends Widget { public $url; public $data; public function init() { parent::init(); } public function run() { $tab[] = $this->url; $action = Url::to(array_merge($tab, $this->data)); return $this->render('redirpost', [ 'url' => $action, 'data' => $this->data ]); } }
Controller
use common\widgets\redirpost\RedirpostWidget; ...... $url = '/podania/podglad'; $data = ['id' => $id]; echo RedirpostWidget::widget(['url' => $url, 'data' => $data]);