Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [symfony] Wyłapywanie szablonu akcji w kontrolerze
Ziels
post
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


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ć?
Go to the top of the page
+Quote Post
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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 :]
Go to the top of the page
+Quote Post
Ziels
post
Post #3





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


Nie zrozumiałeś (IMG:http://forum.php.pl/style_emoticons/default/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.
Go to the top of the page
+Quote Post
Cezar708
post
Post #4





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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ń
Go to the top of the page
+Quote Post
Ziels
post
Post #5





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


To jest trochę na około - tworzy się kolejna akcja i widok. Szukam właśnie sposobu jak zrobić to dla aktualnej akcji.
Go to the top of the page
+Quote Post
Cezar708
post
Post #6





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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. ?>
Go to the top of the page
+Quote Post
Ziels
post
Post #7





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


To też jest takie naokoło :/ Nie istnieje żaden sposób żeby po prostu pobrać widok aktualnej akcji bez jakiegoś szczególnego kombinowania?
Go to the top of the page
+Quote Post
destroyerr
post
Post #8





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
mazur83
post
Post #9





Grupa: Zarejestrowani
Postów: 59
Pomógł: 3
Dołączył: 21.02.2008

Ostrzeżenie: (0%)
-----


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 (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

Edit.
rozwiązany

Ten post edytował mazur83 20.05.2008, 11:51:52
Go to the top of the page
+Quote Post
AxZx
post
Post #10





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
destroyerr
post
Post #11





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Fajnie, tylko w marcu tamtego roku nie było tych (komponent też tak można) funkcji.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:52