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
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;
}
}