====== 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
{{:port_109.png?200|}}
**redirpost.php** \\
'redir_form',
'action'=>$url
]); ?>
$value):
?>
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** \\
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]);