Nastavení hodnoty statické proměnné

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Popik
Člen | 30
+
0
-

Ahoj,

nevím si rady s jedním problémem. Podle mne by to fungovat mělo, ale zatím bohužel…

Potřeboval jsem předávát mezi presentery nějaké údaje(id a jméno presenteru odkud přijdu). Nejdříve jsem na to šel přidáním těhto parametrů pri volaní redirect. To funguje, ale pro uchování těchto získaných parametrů jsem každe volání

<?php
redirect('this')
?>

musel volat zase s těma parametrama, jelikož např. údaj kam se vrátit byl presenteru původně poslán při jeho zavolání…

Proto jsem se rozhodl definovat v BasePresenteru statické proměnné, které by tyto informace uchovávaly tak dlouho, dokud by je zase někdo nezměnil. Takže definované to mám takto:

BasePresenter:

<?php

abstract class Admin_BasePresenter extends BasePresenter{

    private static $id_supp;

    public static function setId_Supp($value){
        self::$id_supp = $value;
    }

    public static function getId_Supp(){
        return self::$id_supp;
    }
}

?>

V prezenterech, které dědí jsem tedy volal

<?php
 parent::getId_Supp()
?>

a v handleru jsem volal např.

<?php
 parent::setId_Supp($id)
?>

Problém je, že funkce getId_Supp() nevrací nic resp. funkce setId_Supp($id) nenastaví statickou proměnnou na hodnotu $id, protože pokud v definici statické proměnné zároveň určím její hodnotu, třeba takto:

<?php

private static $id_Supp = 1;

?>

pak funkce getId_Supp() vrací správně 1.

Podle php manuálu by to ale chodit mělo. Nemohl by mi prosím někdo poradit v čem je problém? Díky.

JakubKohout
Člen | 92
+
0
-

Použij persisentní parametry ;) Popřípadě StoreRequest

Majkl578
Moderator | 1364
+
0
-

Vpodstatě vše co jsi tu napsal je špatně. Nevím kde jsi přišel na to, že se statické vlastnosti přenášejí mezi požadavky. V PHP manuálu to ale určitě nebylo.

Tomu o co se marně snažíš se říká persistentní parametry.

Vypadalo by to tedy nějak takto:

abstract class Admin_BasePresenter extends BasePresenter{

	/** @persistent */
	public $id_supp;
}

Jelikož se jedná o public property, není třeba mít getter a ani setter.


parent::getId_Supp()

Z jakého důvodu parent a ne self/static?


Potřeboval jsem předávát mezi presentery nějaké údaje(id a jméno presenteru odkud přijdu).

Proč zrovna v URL?

Popik
Člen | 30
+
0
-

Proč zrovna v URL? No protože jiný způsob jsem nevěděl… Taky se mi to moc nelíbilo a proto mě napadlo jít na to s tou statickou proměnnou. Mrknu na ty persistentní prametry.

Díky.