Ajax – redirect – persistentní parametry se ztratí

pasik
Člen | 8
+
0
-

Ahoj, mám problém se ztrácením persistentních parametrů při redirectu pokud jsou volány ajaxem.

Jedná se o Nette 2.4 a používám js knihovnu nette.ajax.js.

Kód

<?php

class TestPresenter {

   /**
     * @var int
     * @persistent
     */
    public $year;

    /**
     * @var array
     * @persistent
     */
    public $tags = [];




    public function handleSetYear($year)
    {
        $this->year = $year;
        $this->redirect('default');
    }


    public function handleSetTag($tag)
    {
        if (($key = array_search($tag, $this->tags)) !== false) {
            unset($this->tags[$key]);
        } else {
            $this->tags[] = $tag;
        }
        $this->redirect('default');
    }

    public function renderDefault($year = null, $tags = [])
    {
        $this->template->tags = $tags;
        $this->template->year = $year;

        //$this->redrawControl('selectedFilters');
    }

}

?>

Šablona

<?php
{block content}

	{snippet selectedFilters}
		<a class="ajax_" n:href="setYear! 2019">2019</a> |
		<a class="ajax_" n:href="setYear! 2020">2020</a> |
		<a class="ajax_" n:href="setYear! 2021">2021</a> |

		<a class="ajax_" n:href="setTag! Poplatky">Poplatky</a> |
		<a class="ajax_" n:href="setTag! Rozpočet">Rozpočet</a> |
		<a class="ajax_" n:href="setTag! Voda">Voda</a> |

		<hr />
		<h2>Filters</h2>


		{php print_r($this->tags)}
		{php print_r($this->year)}

	{/snippet}


{/block}

?>

A teď o co jde. Pokud nepoužiju ajax, tak všechno funguje správně, parametry se předávájí, doplňují (štítky).
Pokud použiji redirect, tak se nevypíše nic (resp se mi to nějak ztrácelo; ted už se nevypíše nic).
Pokud vyhodím redirect a nechám v renderDefault redrawControl tak to taky funguje, ale mám hnusnou URL (handleYear nebo handleTag), tj test?tag=Rozpočet&year=2021&tags%5B0%5D=Poplatky&do=setTag

Chci mít Url ve formátu renderDefault($year, $tags) (to si pak ještě upravím v routeru), rád bych to měl AJAX-ové a nechci mít v url žádný handleSetter viz výše poznámka o hnusné URL.

Jak na to prosím?

PS. Ještě jsem zkoušel toto:
<?php $this->forward(‚default‘, $this->year, $this->tags); ?>

Ale URL furt hnusná test?tag=Poplatky&year=2020&tags%5B0%5D=Voda&tags%5B1%5D=Rozpočet&do=setTag
Takže je to stejné jako kdyby to tam vůbec nebylo a stačí invalidace snippetu.

Editoval pasik (6. 5. 2021 21:32)