Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF] Optymalizacja
mate
post
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 27.06.2007

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


Witam, mam pytanie związane ze zwiększeniem optymalizacji mojego kodu. Mam zrobione klasy abstrakcyjne i większość zawsze jest dziedziczona w moich akcjach, jednak od czasu do czasu zdarza się, że mam jakieś akcje w kontrolerach, które muszą się różnić od podstawowej i wtedy przeciążam całą akcję, a w 90% i tak powielam kod by zmienić tylko 2 linie. Dlatego chciałem zapytać co jest dobre na zastosowanie tego aby ciągle nie powielać kodu ?
Chodzi mi np. o takie coś:

  1. $this->_helper->layout()->disableLayout();
  2. $this->_helper->viewRenderer->setNoRender(true);
  3. if(!$this->getRequest()->isXmlHttpRequest()) return;
  4.  
  5. if ($this->getRequest()->isPost()) {
  6. $form = new Default_Form_ContactForm();
  7. if ($form->isValid($this->getRequest()->getPost())) {
  8. ------------------------------------------------------------------
  9. TU JAKIEŚ ZADANIA, KTÓRE SĄ UNIKALNE DLA AKCJI
  10. ------------------------------------------------------------------
  11. }
  12. $this->view->form = $form;
  13. } else {
  14. throw new Exception('Błędny adres!', 404);
  15. }


Jak widać wszystkie te linie mogą być spokojnie raz zaimplementowane, a nie powtarzane tylko dlatego, że coś się różni w tym bloku.
Pozdrawiam

Ten post edytował mate 1.02.2013, 12:07:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
karolrynio
post
Post #2





Grupa: Zarejestrowani
Postów: 144
Pomógł: 25
Dołączył: 2.02.2009

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


Osobiście użyłbym: Zend_EventManager (dodany chyba w wersji 1.12)
Może robic dokładnie to o czym piszesz.
W Zendzie 2 przykładowy kod wyglądałby tak:
  1. $this->_helper->layout()->disableLayout();
  2. $this->_helper->viewRenderer->setNoRender(true);
  3. if(!$this->getRequest()->isXmlHttpRequest()) return;
  4.  
  5. if ($this->getRequest()->isPost()) {
  6. $form = new Default_Form_ContactForm();
  7. if ($form->isValid($this->getRequest()->getPost())) {
  8. $eventManager->trigger('nazwaZdarzenia', $this, array( /* parametry */ ))
  9. }
  10. $this->view->form = $form;
  11. } else {
  12. throw new Exception('Błędny adres!', 404);
  13. }


Teraz jeśli chcesz dla jakiegoś kontrolera zmienić zachowanie możesz zrobic tak:

  1. $events->attach('TwojController', 'nazwaZdarzenia', function($e) {
  2. $controller = $e->getTarget();
  3. // zrób coś z czego potrzebujesz, np:
  4. $controller->jakasMetoda();
  5. });


Możesz to zrobic w pluginie, bootstrapie gdzie chcesz. Moim zdaniem to jest najlepszy sposób bo możesz nie zmieniając kodu podpinac się w dowolnym miejscu metody.
Go to the top of the page
+Quote Post

Posty w temacie


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: 15.10.2025 - 00:52