Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony]Czyszczenie cache - programowo
Forum PHP.pl > Forum > PHP > Frameworki
borpaw
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:

  1. function clearUrlCache() {
  2.  
  3. $fs = new Filesystem();
  4.  
  5. $fs->remove($this->container->getParameter('kernel.cache_dir') . "/appProdUrlGenerator.php");
  6. $fs->remove($this->container->getParameter('kernel.cache_dir') . "/appProdUrlMatcher.php");
  7.  
  8. $fs->remove($this->container->getParameter('kernel.cache_dir') . "/appDevUrlGenerator.php");
  9. $fs->remove($this->container->getParameter('kernel.cache_dir') . "/appDevUrlMatcher.php");
  10. }


I potem w użyciu:

  1. $this->clearUrlCache();
  2. exec('php app/console cache:clear --env=prod --no-debug');
  3. exec('php app/console cache:clear --env=dev --no-debug');
Crozin
Dlaczego edycja jakiegoś dokumentu (właśnie, jakiego?) wymaga wyczyszczenia całego cache'a? Możesz opisać dokładnie co chcesz zrobić?
borpaw
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
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
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
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
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
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
Czy mógłbyś pokazać taki przykładowy kontroler/szablon/parametry dla 2-3 dokumentów?
borpaw
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.html

Dodanych ś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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.