2010-03-01 14 views
10

मैं (प्रमाणीकरण और विभिन्न अन्य राज्यों के आधार पर) एक सामने नियंत्रक प्लगइन में मेरी रीडायरेक्ट केंद्रीकृत करने के लिए कोशिश कर रहा हूँ। अब तक मैं कोशिश की है:पुनर्निर्देशन प्लगइन Zend

$this->setRequest(new Zend_Controller_Request_Http('my_url')); 
विभिन्न बिंदुओं पर

प्लगइन (यानी routeStartup से dispatchLoopShutdown करने के लिए) में है और यह भी:

$this->setResponse(new Zend_Controller_Response_Http('my_url')); 

किसी को भी इस पर कुछ सहायता की पेशकश कर सकते हैं, या में मुझे बात एक ट्यूटोरियल की दिशा?

उत्तर

23

रीडायरेक्ट करने देख रहे हैं, तो उपयोगकर्ता यह लॉग इन नहीं है, dispatchLoopStartup के पहले पैरामीटर() अनुरोध ऑब्जेक्ट में एक संभाल है।

public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request) 
{ 
    if(!Zend_Auth::getInstance()->hasIdentity()) 
    { 
     $request->setControllerName('auth'); 
     $request->setActionName('login'); 
     // Set the module if you need to as well. 
    } 
} 
+0

आह - मुझे लगता है कि मैं के लिए क्या देख रहा था। मैं पुनर्निर्देशक (जो पहले से उपयोग में है) का उपयोग करना टालना चाहता हूं और स्रोत पर अनुरोध को रोकना चाहता हूं। आपकी मदद के लिए धन्यवाद, मैं इसे एक भंवर दे दूंगा। – sunwukung

+0

ध्यान दें कि यह HTTP रीडायरेक्ट जारी नहीं करता है या कोई नया अनुरोध नहीं बनाता है, लेकिन अनुरोध को अग्रेषित/संशोधित करना बेहतर है - अच्छा जवाब। –

+0

रीडायरेक्टिंग और अग्रेषण अक्सर ज़ेंड फ्रेमवर्क में भ्रमित होते हैं।मतभेदों को समझना महत्वपूर्ण है। अपने प्रश्न में वह रीडायरेक्ट कहता है लेकिन मुझे लगता है कि वह वास्तव में क्या मतलब है अग्रेषण कर रहा है। – smack0007

28

सबसे आसान तरीका है जेडएफ के पुनर्निर्देशन ActionHelper उपयोग करने के लिए

$r = Zend_Controller_Action_HelperBroker::getStaticHelper('redirector'); 
    $r->gotoUrl('/some/url')->redirectAndExit(); 

वैकल्पिक रूप से HelperBroker बिना यह दृष्टांत होगा

$r = new Zend_Controller_Action_Helper_Redirector; 
    $r->gotoUrl('/some/url')->redirectAndExit(); 

ActionHelper एक API केवल के एक नंबर के माध्यम से पुनः निर्देशित के बारे में चिंतित प्रदान करता है विधियों, gotoRoute, gotoUrl, gotoSimple, जैसे आप अपने देसी के आधार पर उपयोग कर सकते हैं जो लाल उपयोग करें।

आंतरिक रूप से, ActionHelper हालांकि रीडायरेक्ट करने के लिए प्रतिक्रिया और रूटर के API का उपयोग करता है, तो आप भी सीधे उनके तरीकों का उपयोग कर सकते हैं, उदाहरण के

$request->setModuleName('someModule') 
      ->setControllerName('someController') 
      ->setActionName('someAction'); 

या

$response->setRedirect('/some/url', 200); 

अतिरिक्त पठन:

+0

इसके लिए धन्यवाद, मुझे यह उल्लेख करना चाहिए था कि मैं पुनर्निर्देशक (जिसे मैं पहले से ही नियंत्रकों में उपयोग कर रहा हूं) का उपयोग करने से बचने की कोशिश कर रहा हूं, और अनुरोध/प्रतिक्रिया को सीधे रोकना चाहता हूं। हालांकि लिंक के लिए धन्यवाद, मैं उन्हें कल एक नज़र दूंगा। – sunwukung

3

आप अनुक्रमणिका पृष्ठ में पुनर्निर्देशित करने के लिए तो यह पर्याप्त होना चाहिए चाहते हैं।

public function preDispatch(Zend_Controller_Request_Abstract $request) 
{ 
    if(!Zend_Auth::getInstance()->hasIdentity()) 
    { 
      $baseUrl = new Zend_View_Helper_BaseUrl(); 
      $this->getResponse()->setRedirect($baseUrl->baseUrl()); 
    } 
} 

आप कहीं और रीडायरेक्ट करने के लिए तो बस setRedirect() फ़ंक्शन

धन्यवाद में मानदंड को बदलना चाहते हैं! :)

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