Temat: [ZF 1] redirect, renderScript i już się zamotałem

Witam uczę się ZF i jako projekt do zabawy (nauki) wybrałem zrobienie prostego czatu. Mój problem polega na tym, że nie za bardzo rozumiem działanie renderScript, tzn. idee łapie ale z zastosowaniem mam problem. Szukając rozwiązania problemu natknąłem się na wiele różnych sposobów i mam kompletny chaos w rozumowaniu tego co myślałem, że rozumiem, dlatego piszę tutaj.

Mam sobie kontroler logowanie w nim dwie metody, domyślna która wyświetla formularz (jeśli użytkownik nie zalogowany), druga do logowania (przetwarzająca ten formularz). Problem w tym, że metoda do zalogowania w przypadku niepoprawnego hasła ma ponownie wyświetlić formularz i umieścić dodatkowe informacje. Działa mi to, ale tylko gdy raz użytkownik wyśle formularz. Później dokleja mi do adresu jeszcze raz nazwę kontrolera i metodę...a więc strona nie istnieję pod takim "dziwnym" adresem.

Kod wygląda tak

<?php

class LogowanieController extends Zend_Controller_Action
{

public function init()
{

/* Initialize action controller here */
}

public function indexAction()
{
$auth = Zend_Auth::getInstance();
if($auth->hasIdentity()) $this->redirect ('czat');
$this->view->form = new Application_Form_Logowanie();

}

public function zalogujAction()
{

if($this->getRequest()->isPost()) {

$form = new Application_Form_Logowanie();
if($form->isValid($this->getRequest()->getPost())) {
$adapter = new Zend_Auth_Adapter_DbTable(
null,
'users',
'login',
'pass',
'MD5(?)'

);
$adapter->setIdentity($form->getValue('login'));
$adapter->setCredential($form->getValue('pass'));

$auth = Zend_Auth::getInstance();

$result = $auth->authenticate($adapter);

if($result->isValid()) {
return $this->redirect('czat');
}

$form->pass->addError('Błedne hasło');

$url = $this->view->url(array('action' => 'logowanie'));
$form->setAction($url);

$this->view->form = $form;
$this->renderScript('logowanie/index.phtml');


}else{
$this->redirect('logowanie');
}
}else{

$this->redirect('logowanie');
}
}


}

Co ciekawe action mam zawsze na "logowanie/zaloguj"

1. Co robię źle z renderScript lub z setAction ?
2. $this->redirect to alias dla $this->_helper->redirector()Ten post został edytowany przez Autora dnia 10.08.13 o godzinie 13:16

Temat: [ZF 1] redirect, renderScript i już się zamotałem

Jest sens rozdzielać to na 2 akcje? Zrób jedną akcję login. Formularz niech wysyła do samego siebie action="" i zrób po prostu sprawdzenie czy request jest POSTem, jeśli tak to wykonaj logikę logowania, jeśli nie to po prostu wyświetl formularz. Coś tego typu:


public function loginAction{

$data = array(
'login' => '',
'pass'=> ''
);
$errors = array();

if( $this->_request->isPost() ){
$data = $this->_getParam('data'); // zakładam że w formie były inputy o name data[login] i data[pass]
// tutaj logika logowania
// jeśli dane logowania prawidłowe to logujesz usera (sesja) i robisz redirect np. do widoku "moje konto" czy co tam ma być
// w przeciwnym wypadku komunikat do tablicy $errors
$this->_redirect('/');
}

$this->view->errors = $errors;
$this->view->data = $data;

}


no a form coś w tym stylu:


<form method="POST">
Login: <input type="text" name="data[login]" value="<?php echo $this->['login']; ?>"/> <br/>
Hasło: <input type="password" name="data[pass]" value=""/> <br/>
<input type="submit" value="zaloguj"/>
<?php if(count($this->errors)>0): ?>
<?php foreach($this->errors as $error): ?>
<div class="error"><?php echo $error; ?></div>
<?php endforeach; ?>
<?php endif; ?>
</form>


To tak na szybko, najprostsza metoda bez zbędnego redirectowania i przekazywania wyniku logowania do innego widoku.Ten post został edytowany przez Autora dnia 10.08.13 o godzinie 20:52

Temat: [ZF 1] redirect, renderScript i już się zamotałem

hehe nie wpadłem na to, chodź intryguje mnie co jest nie tak w moim pomyśle z renderScript...

nazwa data[login] to konwencja z jakiegoś walidatora w ZF?

konto usunięte

Temat: [ZF 1] redirect, renderScript i już się zamotałem

Dominik Z.:
hehe nie wpadłem na to, chodź intryguje mnie co jest nie tak w moim pomyśle z renderScript...

nazwa data[login] to konwencja z jakiegoś walidatora w ZF?

Nie, to zapis wysyłania danych w postaci tablicy z formularza do PHP.
Możesz ją później odebrać za pomocą $_POST['data'] lub $_GET['data'] w zależności od wybranej metody w formularzu HTML.

Następna dyskusja:

Zend Framework 1.6 Już jest!




Wyślij zaproszenie do