Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] layout i zend_form
Forum PHP.pl > Forum > PHP > Frameworki
kociupk
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
batman
Jakiś czas temu na blogu napisałem jak skorzystać z Zend_Auth. Poczytaj, może Ci pomoże.
kociupk
z logowaniem nie mam problemu tylko glownie z przekazaniem formularza do layout u
darko
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;
?>
kociupk
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>
pc3t
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>
zend
  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
kociupk
@darko przekazywanie takich formularzy przez kontroler nie jest dobrym pomyslem mozesz napisac dlaczego nie jest to dobre rozwiazanie?
zend
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
darko
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
webmaniak
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ę.
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.