Proměnná se neuloží do session
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- lukas.sirhal
- Backer | 20
Ahoj, dostal jsem se k problému neukládání proměnných do session.
V BaseDealerPresenter si vytvářím session a sekci takto:
/** @var Nette\Http\Session */
public $session;
/** @var Nette\Http\SessionSection */
public $sesPrintData;
protected function startup() {
parent::startup();
$this->session = $this->context->getByType('Nette\Http\Session');
$this->sesPrintData = $this->session->getSection("sesPrintData");
$this->sesPrintData->setExpiration(0);
if(!$this->sesPrintData->vals){
$sesId = Strings::random(25);
$this->sesPrintData->vals['sesId'] = $sesId;
}
.
.
Pak si v PrintPresenteru kontroluji zda je sekce již plná:
if(empty($this->sesPrintData->vals['items'])){
$this->getClearData($id);
}
A pokud není tak si vkládám do sekce takto:
$arr = array(
"id" => $gc->id,
"value" => $gc->value,
"name" => $gc->name,
"paper_id" => $papers[0]->id,
"frame" => $frame,
"frame_id" =>$frames[$key]["frame_id"],
"count" => 0,
"item_price" => $action->value*$this->percent,
"item_total" => $action->value*$this->percent*0
);
$this->sesPrintData->vals['items'][$key] = $arr;
Tyhle itemy vypisuji po řádcích do formuláře a ve formuláři je možnost měnit hodnoty. Takže třeba pomocí AJAX měním „paper_id“ nebo frame_id atd…
public function handleChangerowdata($rowId, $what, $value){
if (!empty($this->sesPrintData->vals["items"])) {
foreach ($this->sesPrintData->vals["items"] as $key => $item) {
if ($rowId == $key) {
$this->sesPrintData->vals["items"][$key][$what] = (int)$value;
}
}
}
}
Používám nette 2.1 a už opravdu nevím kde hledat chybu proč mi to tu
sekci neuloží.
Na stránce mám ještě jeden mini form pomocí kterého můžu přidávat
další itemy. To mám řešené stejně jako je popsáno výše s tím že se
vkládá za poslední index pole „items“
Přidání dalšího itemu je tedy po odeslání formuláře a pak je
redirect(„this“) změna polozek je pomocí AJAXu.