borpaw
13.01.2016, 09:28:54
Witam
Potrzebuję wyczyścić cache po edycji dokumentu, jak to programowo zrobić? Jest takie zdarzenie np: dla listenera gdzie po zapisie mogę cache wyczyścić? Może ktoś podpowie jak i gdzie to najlepiej zrobić?
Mam takie funkcje do tego:
function clearUrlCache() {
$fs = new Filesystem();
$fs->remove($this->container->getParameter('kernel.cache_dir') . "/appProdUrlGenerator.php");
$fs->remove($this->container->getParameter('kernel.cache_dir') . "/appProdUrlMatcher.php");
$fs->remove($this->container->getParameter('kernel.cache_dir') . "/appDevUrlGenerator.php");
$fs->remove($this->container->getParameter('kernel.cache_dir') . "/appDevUrlMatcher.php");
}
I potem w użyciu:
$this->clearUrlCache();
exec('php app/console cache:clear --env=prod --no-debug'); exec('php app/console cache:clear --env=dev --no-debug');
Crozin
13.01.2016, 10:26:03
Dlaczego edycja jakiegoś dokumentu (właśnie, jakiego?) wymaga wyczyszczenia całego cache'a? Możesz opisać dokładnie co chcesz zrobić?
borpaw
13.01.2016, 11:37:50
Dlatego, że podczas tworzenia dokumentu tworzy się dynamiczny route, widać go w routeCollection ale strona korzysta z cache i nie widzi nowej ścieżki dopiero po wyczyszczeniu cache jest ok. Dlatego pomyślałem że ytrzeba by cache czyścić w takim przypadku, nie mogę znaleźć innego rozwiązania w sieci.
Crozin
13.01.2016, 13:15:56
Dynamiczne generowanie wpisu do konfiguracji routingu wydaje się bardzo, bardzo złym rozwiązaniem. Możesz opisać jakie adresy chciałbyś uzyskać? Dlaczego nie możesz puścić tego przez jedną akcję, która na podstawie URL-a zdecyduje, który dokument wczytać?
borpaw
13.01.2016, 13:39:58
scieżki są generowane z bazy, używam loadera scieżek opisanego w dokuentacji tyle, że on działa tylko raz po usunięciu keszu, może wiesz co zrobić żeby loader działał po jakimś zdarzeniu?
Crozin
13.01.2016, 13:45:00
Wygląda mi na to, że mamy tutaj do czynienia z
problemem XY. ;-)
Napisz co chciałbyś finalnie osiągnąć, a nie z czym masz problemem? Domyślam się, że masz
n dokumentów, każdy pod adresem domena.com/dokument-a, domena.com/dokument-b, domena.com/dokument-c, a po dodaniu nowego dokumentu chcesz by był dostępny pod adresem domena.com/nowy-dokument? Dlaczego nie stworzysz po prostu jednej akcji domena.com/{nazwa-dokumentu}, która go wczyta?
borpaw
13.01.2016, 14:05:40
Chodzi o to że jak utworzę dokument to ma się dla niego stworzyć ścieżka taka tylko dla niego, tam jest jego controller, template jakieś inne parametry.
A jak zrobię ścieżkę typu domena.pl/firma/{_slug} to dla wszystkich dokumentów mam to samo. Dlatego nie mogę przewidzieć co wpisać na sztywno do np: routing.yml i potem to wskazywać tylko dokumentowi.
Mam interfejs gdzie tworzę sobie ścieżki zapisuję do bazy i potem wskazuje dokumentowi taką ścieżkę, i cały ambaras jest o to, że to nie trafia do keszu bo loader działa tylko raz, dopiero jak się kesz usunie to zasysa ścieżki. Tak to wygląda mniej więcej
destroyerr
13.01.2016, 15:26:03
Nie wiem co chcesz robić ale wygląda to tak jakbyś chciał żeby excel dokonywał rekompilacji źródeł po wpisaniu formuły w komórce.
Nie rozumiem Twojej aplikacji ale radzę się zastanowić, czy nie lepiej nadpisać Router (inspiracji szukaj w Symfony CMF).
Crozin
13.01.2016, 15:32:41
Czy mógłbyś pokazać taki przykładowy kontroler/szablon/parametry dla 2-3 dokumentów?
borpaw
14.01.2016, 10:04:19
Tutaj jest odpowiedź jak zrobić dynamic router, który reaguje na każdą zmianę bez czyszczenia cache.
http://marcjschmidt.de/blog/2013/11/30/sym...mic-router.htmlDodanych ścieżek nie widać pod debug:router, nie wiem jak podglądać wyniki działania. Czy to trzeba jakoś połączyć z routerem symfonowym?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.