Globální filter a signály

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

Ahoj,

mám router a používám globální filtr + načítám slug z DB. Vše funguje než se dostanou ke slovu signály pro obsluhu ajaxu nebo třeba flash zprávičky … do parametrů v poli filter out se dostane „do =>…“ nebo „_fid ⇒ …“ a tracy vyhodí hlášku „no route for …“

Prosím dokážete poradit?

Odkaz signál v latte:

<a n:href="updateContent!" class="ajax">Update article</a>

Router

<?php

namespace App;

use Nette;
use Nette\Application\Routers\RouteList;
use Nette\Application\Routers\Route;
use App\Model\RouterFacade;

class RouterFactory {

    /** @var App\Model\RouterFacade */
    private $routerFacade;

    /** @var $urls */
    private $urls;

    public function __construct(RouterFacade $routerFacade) {
        $this->routerFacade = $routerFacade;
    }

    /**
     * @return Nette\Application\IRouter
     */
    public function createRouter() {
        $router = new RouteList;
        $router[] = new Route('[<slug [a-z-0-9\/]+?>/]', [
            NULL => [
                Route::FILTER_IN => [$this, 'filterIn'],
                Route::FILTER_OUT => [$this, 'filterOut']
            ]
        ]);

        return $router;
    }

    public function filterIn($params) {
        $urls = $this->routerFacade->getAllSlugs()->fetchAll();
        foreach ($urls as $url => $value) {
            $this->urls = [
                $value['slug'] => [
                    'presenter' => $value['presenter'],
                    'action' => $value['action'],
                    'id' => $value['idWebhea'],
                ]
            ];
            $url = trim($params['slug'], '/');

            if (isset($this->urls[$url])) {
                return $this->urls[$url];
            }
        }

        return NULL;
    }

    public function filterOut($params) {
        foreach ($this->urls as $url => $url_params) {
            if ($params == $url_params) {
                return ['slug' => $url];
            }
        }
        return NULL;
    }

}