Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [symfony] Wyłapywanie szablonu akcji w kontrolerze
Forum PHP.pl > Forum > PHP > Frameworki
Ziels
Witam

Mam problem następujący - piszę aktualnie prywatne wiadomości dla użytkowników. Komunikaty systemowe wysyłane do użytkowników będą bazować na właśnie PW. Chcialbym sobie zapisać szablony jednego z takich komunikatów i przekazywać je do modelu, niestety nie wiem jak w kontrolerze wstawić dane do szablon i przypisać go do zmiennej. W tym wypadku szablon jest widokiem aktualnej akcji. Metoda
  1. <?php
  2. $this -> getPresentationFor()
  3. ?>

wywołuje ponownie aktualną akcję i wszystko wpada w nieskończoną pętlę. Ktoś może wie jak to zrobić?
Cezar708
hmm, nie wiem czy do końca zrozumiałem, ale skoro chcesz tylko zawartość pliku szablonu to możesz przecież po prostu skorzystać z file_get_contents()

jeśli nie zrozumiałem intencji to przepraszam :]
Ziels
Nie zrozumiałeś smile.gif

Chodziło mi o przypisanie do zmiennej sparsowanego szablonu, z podstawionymi danymi, sprawdzonymi warunkami itp. Czyli takiego kŧóry normalnie zostałby wyświetlony, tyle że zamiast wrzucać go jako wynik działania akcji, to przekazać do modelu.
Cezar708
no a dlaczego pobierasz dla tej samej akcji:

zrób tak:

  1. <?php
  2. public function executeAct1(){
  3. $presentation = $this->getPresentationFor('thisModule', 'act2');
  4. }
  5. public function executeAct2(){
  6. // a tu jest prezentacja i robisz co tu chcesz
  7. }
  8. ?>


nie będzie zapętleń
Ziels
To jest trochę na około - tworzy się kolejna akcja i widok. Szukam właśnie sposobu jak zrobić to dla aktualnej akcji.
Cezar708
no to może ustaw jakiś znacznik w sesji o by się nie zapętliwało:

  1. <?php
  2. public function executeAct1(){
  3. $isGetPres = $this->getUser()->getAttribute('is_get_pres', true);
  4. if ( $isGetPres ){
  5. $this->getUser()->setAttribute('is_get_pres', false);
  6. $presentation = $this->getPresentationFor('thisModule', 'act2');
  7. } else {
  8. $this->getUser()->setAttribute('is_get_pres', true);
  9. }
  10. }
  11. ?>
Ziels
To też jest takie naokoło :/ Nie istnieje żaden sposób żeby po prostu pobrać widok aktualnej akcji bez jakiegoś szczególnego kombinowania?
destroyerr
Nie ma takiej możliwości, z prostej przyczyny: widok jest generowany po wykonaniu akcji. Możesz sobie sam wyrenderować widok:
  1. <?php
  2. $vars = $this->getVarHolder()->getAll();
  3. $view = new sfPHPView();
  4. $view->initialize($this->getContext(), $this->getModuleName(), $this->getActionName(), sfView::SUCCESS);
  5. $paramName = $this->getModuleName().'_'.$this->getActionName().'_layout';
  6. $response = $this->getResponse();
  7. $default = $response->getParameter($paramName, null, 'symfony/action/view');
  8. $response->setParameter($paramName, false, 'symfony/action/view');
  9. $html = $view->render($vars);
  10. $response->setParameter($paramName, $default, 'symfony/action/view');
  11. ?>


Przyszedł mi jescze do głowy pomysł oparcia tego na jakimś filtrze, tylko trzeba ten filtr wykonać po filtrze execution.
mazur83
witam,
chciałem wykożystać kod który podał destroyerr aby wygenerowac widok a następnie stworzyć pdf-a na jego podstawie:

Kod
  
    $test = TestPeer::retrieveByPk($this->getRequestParameter('id'));
     if($test->getPublished() != 1)
       $this->forward('test','list');
     $this->forward404Unless($test);
    
     $view = new sfPHPView();
     $view->initialize($this->getContext(), 'test', 'test', sfView::SUCCESS);
     $paramName = 'test_test_layout';
     $response = $this->getResponse();
     $response->setParameter($paramName, false, 'symfony/action/view');
     $html = $view->render(array('xxx' => $xxx));

     $pdf = new sfTCPDF();
     $pdf->SetFont("FreeSerif", "", 12);
     $pdf->AliasNbPages();
     $pdf->AddPage();
     $pdf->writeHTML($html, true, 0, true, 0);
     $pdf->Output();

     return sfView::NONE;


jak się uruchomi akcje z tym kodem to za pierwszym razem działa (generuje sie pdf) jak się odświeży strone to wypisuje zawartośćc zmiennej $html, a potem wzuca informacje z nagłówka pdf-a i wyświetla krzaczki. może ma ktoś jakiś pomysł jak można wygenerować pdf z zawartością widoku jakiejś akcji questionmark.gifquestionmark.gifquestionmark.gif

Edit.
rozwiązany
AxZx
Cytat(Ziels @ 14.03.2008, 16:24:07 ) *
Witam

Mam problem następujący - piszę aktualnie prywatne wiadomości dla użytkowników. Komunikaty systemowe wysyłane do użytkowników będą bazować na właśnie PW. Chcialbym sobie zapisać szablony jednego z takich komunikatów i przekazywać je do modelu, niestety nie wiem jak w kontrolerze wstawić dane do szablon i przypisać go do zmiennej. W tym wypadku szablon jest widokiem aktualnej akcji. Metoda
  1. <?php
  2. $this -> getPresentationFor()
  3. ?>

wywołuje ponownie aktualną akcję i wszystko wpada w nieskończoną pętlę. Ktoś może wie jak to zrobić?


ja w akcji używam $this->getPartial();
do tej metody podajesz nazwę partiala i podajesz parametry. treść tego partiala mogę swobodnie zapisać w bazie jako treść prywatnej wiadomości do użytkownika.
destroyerr
Fajnie, tylko w marcu tamtego roku nie było tych (komponent też tak można) funkcji.
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.