Narzędzia użytkownika

Narzędzia witryny


przekazywanie_danych

Przekazywanie danych


Zamiast $_POST

$post = Yii::$app->request->post();
 
$post_modelu = $post['nazwa klasy modelu'];

Przekazywanie zmiennych z kontrolera do layoutu (main.php)

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:'-' ?>

Przekazywanie danych metodą POST

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

Komunikat na następnej stronie

Yii::$app->session->setFlash('success', "Komunikat.");

Redirect metoda POST

Widget common→widgets

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]);
przekazywanie_danych.txt · ostatnio zmienione: 2024/09/15 16:22 przez 127.0.0.1