ZF görünümü komut dosyalarında PartialLoop ile FlashMessenger kullanma

2 Cevap php

Ben FlashMessenger görünümü helper'a ilgili iki soru var. Her iki soru da bu kodu yapmak için şunlardır:

Benim eylem yöntemi:

private $_messages; // set to $this->_helper->FlashMessenger; in init()

public function loginAction() {
    // > login validation <

    // Switch based on the result code
    switch ($result->getCode()) {
        // > snip several cases <

        case Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
            $this->_messages->addMessage("That wasn't the right password."); 
        break;

        case Zend_Auth_Result::SUCCESS:
            $this->_messages->addMessage('Logged you in successfully. Welcome back!');
            $this->_helper->Redirector('index', 'home');
        break;
    }

    // >snip<

    $this->view->messages = $this->_messages->getMessages();
    $this->render();
}

Benim düzeni (Zend_Layout) œkod:

<?php if (isset($this->messages) && count($this->messages) > 0) {
    print_r($this->messages);
    //$this->partialLoop('partials/messages.phtml', $this->messages);
} ?>

Why is the message not output the first time it is set?

Ben bu oturumlarda depolanan messenger ile yapmak için bir his var ama benim uygulaması ile yapmak eminim.

Benim form için kötü bir değer göndermek zaman ben de tekrar formu göndermek veya yenileme kadar ben bir mesaj alamadım.

What is a good way of sending this to the PartialLoop helper?

Haberci çıktısı gibi bir şeydir:

Array(
    [0] => 'Message',
    [1] => 'Second message' //etc.
)

Ben (bir 'message' => 'Message string' anahtar / değer çifti içeren bir dizi olması her mesajı gerekiyor) mesajı almak gerekiyor gibi ama bu bir PartialLoop için iyidir.

Yerine görünümüne göndermeden önce diziyi yeniden daha iyi bir yöntem var mı?

2 Cevap

OIS Ben onlar FlashMessenger eklenen nerede hangi aynı isteği dahilinde flaş mesajları almak olduğunu eklemek istiyorum atıfta. Bu durumda kullanmak zorunda Zend_Controller_Action_Helper_FlashMessenger::getCurrentMessages().

Sizin durumunuzda hat değiştirmek olurdu

$this->view->messages = $this->_messages->getMessages();

karşı

$this->view->messages = $this->_messages->getCurrentMessages();

Umut olur.

Gelen hasta alıntı the documentation.

10.8.4.4.1. Giriş

The FlashMessenger helper allows you to pass messages that the user may need to see on the next request. To accomplish this, FlashMessenger uses Zend_Session_Namespace to store messages for future or next request retrieval.

Temel olarak, bu evet iletileri görmek için sayfayı yenilemek zorunda olduğu anlamına gelir.

PartialLoop için düzenleyin:

Bu deneyebilirsiniz:

foreach ($array as $message) {
  $newArray[]['message'] = $message;
}

Ama PartialLoop kullanmak zorunda kalmazsınız. Kısmi ve orada döngü onu göndermek olabilir. Ya da tam orada görünümünde bile döngü bu.