Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework] layout i zend_form
kociupk
post
Post #1





Grupa: Zarejestrowani
Postów: 97
Pomógł: 1
Dołączył: 29.03.2006

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


zastanawiam sie jak przekazac formularz do layout, odebrac dane i sprawdzic czu uzytkownik jest zalogowany

mam plik indexController ktory przekazuje formularz do helpera
  1. class IndexController extends Zend_Controller_Action
  2. {
  3. function init()
  4. {
  5. $form = new App_Form_Login();
  6. $helper= $this->_helper->getHelper('formlogin');
  7. $helper->formlogin($form);
  8. }
  9. }

plik helper FormLogin

  1. class Zend_View_Helper_FormLogin extends Zend_View_Helper_Abstract
  2. {
  3. private $form;
  4.  
  5. public function formlogin($form)
  6. {
  7. return $form;
  8. }
  9. }

plik bootstrap
  1. protected function _initViewHelper()
  2. {
  3. $this->bootstrap('layout');
  4. $layout = $this->getResource('layout');
  5. $view = $layout->getView();
  6.  
  7. $form = new Zend_View_Helper_FormLogin();
  8. $view = $form->formlogin();
  9. }

nie wiem czy to dziala wszystko pisane z palca chce sie dowiedziec czy mam dobry tok myslenia czy to tak ma mniej wiecej wygladac

Ten post edytował kociupk 10.04.2010, 14:18:51
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
batman
post
Post #2





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Jakiś czas temu na blogu napisałem jak skorzystać z Zend_Auth. Poczytaj, może Ci pomoże.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
kociupk
post
Post #3





Grupa: Zarejestrowani
Postów: 97
Pomógł: 1
Dołączył: 29.03.2006

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


z logowaniem nie mam problemu tylko glownie z przekazaniem formularza do layout u
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Formularz przekazujesz w kontrolerze do widoku a nie do layouty w dowolnej metodzie oprócz _init:
$form = new Zend_Form();
// ...
$this->view->form = $form;
// ...
i dalej w widoku:
<?php
echo $this->form;
?>


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
kociupk
post
Post #5





Grupa: Zarejestrowani
Postów: 97
Pomógł: 1
Dołączył: 29.03.2006

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


darko tyle to wiem wytlumacze to innaczej chce dodac formularz po za <?php echo $this->layout()->content ?>

  1. <?php echo $this->doctype() ?>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Zend Framework Quickstart Application</title>
  5. <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
  6. </head>
  7. <div>np. tutaj chce dodac formularz logowania </div>
  8. </div>
  9.  
  10. <?php echo $this->layout()->content ?>
  11.  
  12. </body>
  13. </html>
Go to the top of the page
+Quote Post
pc3t
post
Post #6





Grupa: Zarejestrowani
Postów: 7
Pomógł: 1
Dołączył: 11.09.2009

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


Poczytaj o Zend_Layout, bo wyraźnie nie rozumiesz zasad jego działania. Tak jak pisał darko:
w controllerze:
$this->view->form = $form;
w skrypcie layouta np tak:

  1. <?php echo $this->doctype() ?>
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>Zend Framework Quickstart Application</title>
  5. <?php echo $this->headLink()->appendStylesheet('/css/global.css') ?>
  6. </head>
  7. <div>np. tutaj chce dodac formularz logowania </div>
  8. </div>
  9.  
  10. <?php echo $this->layout()->content ?>
  11.  
  12. <?php
  13. echo $this->form;
  14. ?>
  15.  
  16. </body>
  17. </html>


Ten post edytował pc3t 10.04.2010, 15:40:55
Go to the top of the page
+Quote Post
zend
post
Post #7





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. $this -> _helper -> layout() -> loginForm = $form
  2. //kod w kontrolerze


  1. <html>
  2. <body>
  3. <div><? echo $this -> layout() -> loginForm; ?></div>
  4. <? echo $this -> layotu() -> content; ?>
  5. </body>
  6. </html>

A druga opcja to
  1. <html>
  2. <body>
  3. <div><? echo $this -> myLoginForm(); //jesli forma masz w helperze, ale mozesz miec problem w przypadku kilku modulow ?></div>
  4. <? echo $this -> layotu() -> content; ?>
  5. </body>
  6. </html>

Trzecia opcja to
  1. protected function _initViewHelper()
  2. {
  3. $this->bootstrap('layout');
  4. $layout = $this->getResource('layout');
  5.  
  6. $form = new Zend_View_Helper_FormLogin();
  7. $layout -> loginForm = $form;
  8. }
  9.  
  10. echo $this -> layout() -> loginForm; //czesc w layoucie


@darko przekazywanie takich formularzy przez kontroler nie jest dobrym pomyslem

Ten post edytował zend 10.04.2010, 16:26:37
Go to the top of the page
+Quote Post
kociupk
post
Post #8





Grupa: Zarejestrowani
Postów: 97
Pomógł: 1
Dołączył: 29.03.2006

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


@darko przekazywanie takich formularzy przez kontroler nie jest dobrym pomyslem mozesz napisac dlaczego nie jest to dobre rozwiazanie?
Go to the top of the page
+Quote Post
zend
post
Post #9





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


DRY - w przypadku dodawania nowego kontrolera musial bys dodwac linijke z inicjacja tego formularza do kazdego z nich, kwestia dziedziczenia wydawac by sie moglo rozwiazuje problem, ale w przypadku uzycia forwardowania albo helpera widoku action formularz byl by ponownie tworzony, co jest okropna praktyka smile.gif
Go to the top of the page
+Quote Post
darko
post
Post #10





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(zend @ 10.04.2010, 20:47:51 ) *
DRY - w przypadku dodawania nowego kontrolera musial bys dodwac linijke z inicjacja tego formularza do kazdego z nich, kwestia dziedziczenia wydawac by sie moglo rozwiazuje problem, ale w przypadku uzycia forwardowania albo helpera widoku action formularz byl by ponownie tworzony, co jest okropna praktyka smile.gif

Ok pod warunkiem, że masz jeden i ten sam formularz na stronie smile.gif


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
webmaniak
post
Post #11





Grupa: Zarejestrowani
Postów: 371
Pomógł: 30
Dołączył: 14.04.2010

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


Witam, mam podobny problem co założyciel tematu. Mianowicie chciałbym po prawej stronie w layoucie stworzyć panel logowania więc w layoucie jest np.:
  1. <?php echo $this->layout()->panel; ?>

Z tego co dowiedziałem z innych źródeł muszę stworzyć akcję panel w indexController, więc:
  1. //panelAction() w pliku indexController.php:
  2. public function panelAction()
  3. {
  4. $form = new Application_Form_Panel();
  5. $request = $this->getRequest();
  6.  
  7. if ($request->isPost()) {
  8. if ($form->isValid($request->getPost())) {
  9.  
  10. $user = new Application_Model_User();
  11. $user->login = $form->getValue('login');
  12. $user->password = $form->getValue('password');
  13. $result = Zend_Auth::getInstance()->authenticate($user);
  14.  
  15. if ($result->isValid()) {
  16. $this->_helper->redirector('index');
  17. } else {
  18. $form->login->addError('Podano niepoprawny login i/lub hasĹ?o.');
  19. }
  20. }
  21. }
  22.  
  23. $this->view->panelForm = $form;
  24. }


a plik z formularzem wygląda tak:
  1. <?php
  2. //plik Panel.php w folderze forms
  3. class Application_Form_Panel extends Zend_Form
  4. {
  5.  
  6. public function init()
  7. {
  8. $this->addElement('text', 'login', array(
  9. 'filters' => array(
  10. 'StringTrim'
  11. ),
  12. 'label' => 'Login:'
  13. ));
  14. $this->addElement('password', 'password', array(
  15. 'label' => 'Hasło:'
  16. ));
  17. $this->addElement('submit', 'submit', array(
  18. 'ignore' => true,
  19. 'label' => 'Zaloguj'
  20. ));
  21. }
  22.  
  23.  
  24. }


No i jeszcze plik panel.phtml:
  1. //plik panel.phtml w folderze views/scripts/index:
  2. <h1>Logowanie</h1>
  3.  
  4. <?php echo $this->panelForm ?>

Nie wiem co tu jest nie tak, będę wdzięczny za każdą wskazówkę.


--------------------
Pomogłem - kliknij , wprowadziłem w błąd - poinformuj niżej lub na pm.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 21.08.2025 - 22:49