Zend Formu'nu kullanarak her sayfada giriş formunu göster

2 Cevap php

Ben esnek içeren kenar çubuğu ve giriş formu (Zend_Form) ve çeşitli modül / denetleyici özel bağlantılar oluşturmak için nasıl anlamaya görünüyor olamaz.

En yaygın çözüm kullanıyor gibi görünüyor:

echo $this->action('login', 'authentication', 'default');

Ama apperently bu 'en iyi' yolu değil mi? Ben bu apprently bir dispatchloop tetikler okumak ve böylece bir isabet performans almak var?

Ben yaklaşık kenar çubuğu için bir View_Helper şarkı düşündüm:

class Zend_View_Helper_Sidebar extends Zend_View_Helper_Abstract
{
    public function sidebar()
    {
        $sidebar = $this->view->placeholder('sidebar');
        $sidebar->setPrefix('<div class="sidebar-element">')
                ->setSeparator('</div><div class="sidebar-element">')
                ->setPostfix('</div>');

        $sidebar->append(new Form_Login);
        $sidebar->append(new Model_Category->getList());
        return $sidebar
    }
}

Benim Form_Login i Aşağıdaki kodu içeren / auth / login ayarlanmış eylem var:

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

    if($request->isPost()) {
        $form = new Form_Login();
        $data = $request->getPost();
        if($form->isValid($data)) {
            $username = $form->getValue('username');
            $password = $form->getValue('password');
            $users = new Model_DbTable_Users();
            $authenticated = $users->login($username, $password);
            if($authenticated) {                    
                    //Succes - show identity instead of loginForm                   
            } else {                                      
                $this->view->loginForm = $form;
                $this->render('/index');
            }
        }
    }
}

Ben yanlış kullanıcı adı / şifre girerseniz o anda boş olan indexAction vermektedir. Bu iyi. Ayrıca gerektiği gibi loginForm içeren benim kenar çubuğu işler, ancak formu (kullanıcı girişi gösterilmez. Ne formu doğrulamak için başarısız hiçbir mesajdır) boş.

Şeklinde adı alan kullanıcı göndermeden önce sağlanan girişini görüntülemek gerekir. Ve bir hata mesajı görüntülenir.

Bu happing değil neden olarak herhangi bir yardım, çok appriciated olduğunu.

2 Cevap

Bir LoginAction içinde form doğrulama yapıyor ve şu anda index eylemine gönderme sözü, bir yazım hatası olduğunu?

Bunun yanı sıra, Form_Login iki kopyasını yaratıyor. Bir kez, eylem ve bir kez görünümü yardımcısında. Eğer eylem bir örneği doğrulamak ise, görünümü yardımcısında form aynı örneğini göstermek gerekir. Sen görünüm yardımcısı içine tüm doğrulama mantığını hareket olabilir ya da size görünüm yardımcı ve eylem arasındaki örneğini paylaşmak olabilir. Ben sonuncusunu önermek için gidiyorum.

Bir form zaten kayıt defterinde varsa sizin bakış yardımcısı kontrol edin. Öyle ise, sadece bu örneği kullanın. Aksi takdirde yeni bir örneğini oluşturabilirsiniz. Burada ne demek istediğimi kaba bir örnek:

class Zend_View_Helper_Sidebar extends Zend_View_Helper_Abstract
{
    public function sidebar()
    {
        $sidebar = $this->view->placeholder('sidebar');
        $sidebar->setPrefix('<div class="sidebar-element">')
                ->setSeparator('</div><div class="sidebar-element">')
                ->setPostfix('</div>');

        if(Zend_Registry::isReigistered('loginForm')) {
            $loginForm = Zend_Registry::get('loginForm');
        } else {
            $loginForm = new Form_Login();
        }

        $sidebar->append($loginForm);
        $sidebar->append(new Model_Category->getList());
        return $sidebar
    }
}

public function loginAction()
{
    $form = new Form_Login();
    Zend_Registry::set('loginForm', $form);

    $request = $this->getRequest();

    if($request->isPost()) {        
        $data = $request->getPost();
        if($form->isValid($data)) {
            $username = $form->getValue('username');
            $password = $form->getValue('password');
            $users = new Model_DbTable_Users();
            $authenticated = $users->login($username, $password);
            if($authenticated) {                    
                    //Succes - show identity instead of loginForm                   
            } else {                                      
                $this->view->loginForm = $form;
                $this->render('/index');
            }
        }
    }
}

Edit:

Hayır, bir formun bir örneği zaten varsa kontrol hiçbir öz yoktur. Bunu kendiniz yapmanız gerekir.

Ben önerilen yolu bir görünüm yardımcısı kullanmaktır eminim. Eğer eylem görünüm yardımcı performansı için kötü bir gönderme döngüye neden kullanarak, söz söylediğim gibi. Ben kararın tüm mantık görünümü yardımcısında veya tutulmalıdır olup olmadığını ne olduğunu bilmiyorum.

Thanks alot for your answer. Yes - about my form validation, it was a typo. Im posting to /auth/login and my validation also goes here.

Form_Login nesnenin örneğine Hakkında, aynı örneği emin olmak için onun güzel bir fikir. Ben bu uygulamaya koyacaktır.

Ama anlamadığım, ben aslında bu çalışma var ki? Ben belki Zend_Form 'öz-kontrol' bir tür olduğu merak edilip ve örneği yaratıldı ya da değil? Sen biliyor musun?

Dahası - Bir View_Helper tüm sayfalarda görünmesini benim Form_Login almak için gitmek için en iyi yol olacağını?