2010-12-23 12 views
5

मुझे आश्चर्य है कि बिना किसी रीडायरेक्ट के फ्लैश मैसेंजर का उपयोग करना संभव है? जैसे। असफल लॉगिन के बाद, मैं फॉर्म को प्रदर्शित करना जारी रखना चाहता हूं, कोई रीडायरेक्ट आवश्यक नहीं है।रीडायरेक्ट के बिना FlashMessenger का उपयोग करना संभव है?

public function loginAction() { 
    $form = new Application_Form_Login(); 

    ... 

    if ($this->getRequest()->isPost() && $form->isValid($this->getRequest()->getParams())) { 
    $authAdapter = new Application_Auth_Adapter($form->getValue('username'), $form->getValue('password')); 
    if ($this->auth->authenticate($authAdapter)->isValid()) { 
     ... 
    } else { 
     // login failed 
     $this->flashMessenger->addMessage('Login failed. You may have entered an invalid username and/or password. Try again'); 
    } 
    } 

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

उत्तर

8

आप का उपयोग कर पुन: निर्देशन $ this-> flashMessenger-> getCurrentMessages बिना फ्लैश संदेश() प्राप्त कर सकते हैं; उदाहरण:

$this->view->messages = array_merge(
    $this->_helper->flashMessenger->getMessages(), 
    $this->_helper->flashMessenger->getCurrentMessages() 
); 
$this->_helper->flashMessenger->clearCurrentMessages(); 
+1

वास्तव में आपको एफएमर का भी उपयोग करने की ज़रूरत नहीं है। आप केवल $-> view-> संदेश = सरणी ('मेरा संदेश', 'मेरा संदेश 2') लिख सकते हैं; –

+0

क्या 'setCurrentMessages() 'का कोई तरीका नहीं है? मैं हमेशा सभी संदेशों को प्रदर्शित नहीं करना चाहता हूं। –

+1

संदेश केवल addMessage() फ़ंक्शन द्वारा जोड़े गए हैं। GetMessages() और getCurrentMessages() के बीच differenct यह है कि पूर्व को रीडायरेक्ट से पहले पिछले पृष्ठ पर सहेजे गए संदेशों को प्राप्त करने के लिए उपयोग किया जाता है और बाद वाले संदेश वर्तमान पृष्ठ प्रसंस्करण के दौरान सेट किए गए संदेशों को पुनर्प्राप्त कर सकते हैं। – ischenkodv

3

निश्चित रूप से, आप कर सकते हैं। लेकिन मैं आम तौर पर फॉर्म में ऑथ-असफलता संदेश संलग्न करता हूं। वास्तव में, यहां तक ​​कि जब फॉर्म-स्तरीय सत्यापन विफल हो जाता है, तो मुझे कुछ ऐसा दिखाना पसंद है जैसे "कृपया नीचे दी गई त्रुटियों को नोट करें"। तो, मैं उन दो मामलों में अलग से इलाज:

public function loginAction() 
{ 
    $form = new Application_Form_Login(); 
    if ($this->getRequest()->isPost()){ 
     if ($form->isValid($this->getRequest()->getPost())){ 
      $username = $form->getValue('username'); 
      $userpass = $form->getValue('userpass'); 
      $adapter = new Application_Model_AuthAdapter($username, $userpass); 
      $result = $this->_auth->authenticate($adapter); 
      if ($result->isValid()){ 
       // Success. 
       // Redirect... 
      } else { 
       $form->setErrors(array('Invalid user/pass')); 
       $form->addDecorator('Errors', array('placement' => 'prepend')); 
      } 
     } else { 
      $form->setErrors(array('Please note the errors below')); 
      $form->addDecorator('Errors', array('placement' => 'prepend')); 
     } 
    } 
    $this->view->form = $form; 
} 
+0

मैं कैसे कर सकता हूं? मेरे उपरोक्त कोड के साथ, फ्लैश मैसेंजर संदेश केवल ताज़ा करने के बाद दिखाए जाते हैं –

+4

यह उन चीजों में से एक है जिन्हें मुझे FlashMessenger के बारे में पसंद नहीं है; यह केवल नियंत्रक स्तर पर रहता है। मेरे लिए, यह फ़्लैश मैसेंजर व्यवसाय एक दृश्य-केंद्रित प्रक्रिया होना चाहिए। यही कारण है कि मैं बड़े पैमाने पर [प्राथमिकता प्रबंधक] नामक एक दृश्य सहायक का उपयोग करता हूं (http://emanaton.com/code/php/zendprioritymessenger)। मौजूदा FlashMessenger को उपयोगी बनाने के लिए, आप [रॉबर्ट बेसिक के फ्लैशमेसेन्जर व्यू हेल्पर] को देख सकते हैं (https://github.com/robertbasic/phpplaneta/blob/master/library/PPN/View/Helper/FlashMessenger.php)। आपके मामले में, रीफ्रेश के साथ, मुझे अभी भी लगता है कि फ़ॉर्म में त्रुटियों को संलग्न करना आसान है। –

संबंधित मुद्दे

 संबंधित मुद्दे