Temat: Zend form w osobnym bloku (sidebar)?

Witam,
Mozecie mi wytlumaczyc jak mozna wyswietlic formularz np. logowania lub czego kolwiek w np. prawej kolumnie layoutu zachowujac walidajcje i wszystkie inne funkcje zwiazane z Zend Form.

Pozdrawiam

konto usunięte

Temat: Zend form w osobnym bloku (sidebar)?

Marceli Podstawski:
Witam,
Mozecie mi wytlumaczyc jak mozna wyswietlic formularz np. logowania lub czego kolwiek w np. prawej kolumnie layoutu zachowujac walidajcje i wszystkie inne funkcje zwiazane z Zend Form.

Pozdrawiam

Ale co ma umiejscowienie formularza na stronie do działa Zend_Form? Chyba że czegoś nie kumam...

Temat: Zend form w osobnym bloku (sidebar)?

Tak jak w każdym innym miejscu. Sprecyzuj z czym masz problem ;)
pozdr.
Piotr Fatyga

Piotr Fatyga Programista .NET

Temat: Zend form w osobnym bloku (sidebar)?

Marceli,

Jest kilka możliwości.

1. Przypisz obiekt Zend_Form do zmiennej layoutu bezspośrednio.

$zendform = new Custom_Zend_Form();
$this->view->layout()->customZendForm = $zendform;

2. Stwórz sobie własny helper widoku albo partial view, renderujący formularz. Następnie
w layoucie w sidebarze, wyświetl ten partial view.

Temat: Zend form w osobnym bloku (sidebar)?

Robie w podobny sposob czyli mam helpera:

class App_View_Helpers_LoginForm extends Zend_View_Helper_Abstract
{
public $view;
public function loginForm()
{
return new Application_Form_Login();
}
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}}

Wszystko jest pieknie ladnie widze formularz tylko nie widze walidacji czy np. wszystkie pola sa wypelnione itd.
Piotr Fatyga

Piotr Fatyga Programista .NET

Temat: Zend form w osobnym bloku (sidebar)?

Zakładam, że dodałeś walidatory.

Zerknij sobie tutaj:

http://framework.zend.com/manual/en/zend.form.quicksta...

A jeśli to nie trybi, to upewnij się czy elementy wchodzące w skład forma posiadają w sobie komunikaty walidacji

Zend_Debug::dump($element);

i

$element->getErrors();
$element->getMessages();

Temat: Zend form w osobnym bloku (sidebar)?

To moze tak po caloscie:
Formularz:

class Application_Form_Login extends Zend_Form
{
public function init()
{
// Set the method for the display form to POST
$this->setMethod('post');
$this->setAction('/auth/');

// Add an email element
$email = $this->addElement('text', 'email', array(
'label' => 'Email:',
'required' => true,
'filters' => array('StringTrim'),
'validators' => array('EmailAddress')
));

Zend_Debug::dump($email);

// Add a login element
$password = $this->addElement('password', 'password', array(
'label' => 'Password:',
'required' => true,
'filters' => array('StringTrim')
));

// Add the submit button
$submit = $this->addElement('submit', 'submit', array(
'ignore' => true,
'label' => 'Login',
));

// And finally add some CSRF protection
$hash = $this->addElement('hash', 'csrf', array(
'ignore' => true,
));
}
}

Helper:

class App_View_Helpers_LoginForm extends Zend_View_Helper_Abstract
{
public $view;
public function loginForm()
{
return new Application_Form_Login();
}
public function setView(Zend_View_Interface $view)
{
$this->view = $view;
}}

Layout:

echo $this->loginForm();

Controller:

class AuthController extends App_Controller_Action
{
public function init()
{
/* Initialize action controller here */
}

public function indexAction()
{
$request = $this->getRequest();

$form = new Application_Form_Login();

if ($this->getRequest()->isPost()) {
if ($form->isValid($request->getPost())) {
return $this->_helper->redirector('index');
}
}

$this->view->form = $form;
}
}

Zend_Debug nie zwraca mi zadnej z podanych przez ciebie metod.Marceli Podstawski edytował(a) ten post dnia 17.02.12 o godzinie 16:28
Piotr Fatyga

Piotr Fatyga Programista .NET

Temat: Zend form w osobnym bloku (sidebar)?

Kiedy robisz przekierowanie na 'index', wykonuje się GET, następnie
inicjujesz nowy obiekt $form i taki formularz też wyświetlasz. Zakomentuj przekierowanie.

Dodatkowo zerknij w linka, którego Ci dałem. Jest tam opis jak dodać dekoratory do pól.

Jeśli chcesz debugować element formularza, np. email, ale w kontrolerze:

Zend_Debug::dump($form->email);

$form->email->getErrors();
$form->email->getMessages();

też powinno zadziałać.

Temat: Zend form w osobnym bloku (sidebar)?

Juz zrobione thx. Rozwiazanie znalazlem tutaj http://stackoverflow.com/questions/2306374/show-login-...Marceli Podstawski edytował(a) ten post dnia 17.02.12 o godzinie 17:24
Piotr Fatyga

Piotr Fatyga Programista .NET

Temat: Zend form w osobnym bloku (sidebar)?

Przekaż obiekt $form do App_View_Helpers_LoginForm w konstruktorze i operuj na tym obiekcie.

Zauważ, że formularz tworzony w LoginForm będzie zawsze nowy.

Tam powinna być następująca logika:



public function loginForm(Zend_Form $form)
{
if (null == $form)
return new Application_Form_Login();

return $form;
}



To musi działać :D

Następna dyskusja:

zend_form & refresh page




Wyślij zaproszenie do