2012-10-30 53 views
12

तो, प्रश्न यह है कि मैं अपने मॉड्यूल में Module.php को कैसे कॉन्फ़िगर कर सकता हूं यह जांचने के लिए कि उपयोगकर्ता सत्र में है या नहीं? यदि वह नहीं है तो मैं उसे लॉग इन पेज पर रीडायरेक्ट करना चाहता हूं।उपयोगकर्ता में रीडायरेक्ट करने के लिए Zend Framework 2 में Module.php को कॉन्फ़िगर कैसे करें यदि सत्र में नहीं है (यदि वह लॉग इन नहीं है)?

मैं नहीं चाहता कि उपयोगकर्ता को अन्य कार्रवाई (नियंत्रक) पर जाने की अनुमति हो, यदि वह सत्र में नहीं है (लॉग इन नहीं है)।

उत्तर

9

यह अधिक जानकारी के लिए ZF2 में ईवेंट के साथ किया जाना चाहिए: click here यह कोड आपकी मदद कर सकता है। http://pastebin.com/FFGVCpki

public function init() { 
    // Attach Event to EventManager 
    $events = StaticEventManager::getInstance(); 

    // Add event of authentication before dispatch 
    $events->attach ('Zend\Mvc\Controller\AbstractActionController', 'dispatch', array (
      $this, 
      'authPreDispatch' 
    ), 110); 
} 
public function authPreDispatch($event){ 
$target = $event->getTarget(); 
$serviceLocator = $target->getServiceLocator(); 
// Do what ever you want to check the user's identity 
$url = $event->getRouter()->assemble (array (
        "controller" => "<controller>" 
      ), array (
        'name' => '<route name>' 
      )); 
$response = $event->getResponse(); 
     $response->setHeaders ($response->getHeaders()->addHeaderLine ('Location', $url))); 
     $response->setStatusCode (302); 
     $response->sendHeaders(); 
     exit(); 
} 
+2

वहाँ मॉड्यूल से पुनर्निर्देशित करने के लिए अच्छे और रास्ता नहीं है। PHP मैं वास्तव में जेडएफ की आंतरिक पुनर्निर्देशन तंत्र का उपयोग किए बिना सीधे हेडर भेजना पसंद नहीं करता हूं। –

5

रीडायरेक्ट का उपयोग नहीं करते हैं, कर setParam() 'मार्ग' घटना का उपयोग कर विधि, इस https://github.com/samsonasik/SanAuthWithDbSaveHandler/commit/e2ae4dfcebb7a952d7b1adaadcf6496c994423b9

+0

यहां कोड का उस टुकड़े को पेस्ट करें जो कुछ त्वरित संदर्भ – codisfy

+0

होगा लेकिन यह प्रदर्शित यूआरएल को नहीं बदलेगा? क्या ऐसा करने के लिए कोई रास्ता है? – herondale

2

कुछ की तरह देखें:

$e->getRouteMatch() 
->setParam('controller', 'Application\Controller\Login') 
->setParam('action', 'login');