2012-09-13 14 views
14

मेरे zf2 नियंत्रक में मैं एप्लिकेशन बेस यूआरएल पुनर्प्राप्त करना चाहता हूं (उदाहरण के लिए http://domain.com)।ZF2 नियंत्रक में baseUrl कैसे प्राप्त करें?

मैंने निम्नलिखित कॉल करने की कोशिश की लेकिन यह एक खाली स्ट्रिंग देता है।

$this->request->getBasePath(); 

कैसे मैं तो मेरे नियंत्रक में URL के http://domain.com हिस्सा मिल सकता है?

उत्तर

39

मैं जानता हूँ कि यह यह करने का सबसे सुंदर तरीका हे, यह काम करता है नहीं है, लेकिन,:

public function indexAction() 
{ 
    $uri = $this->getRequest()->getUri(); 
    $scheme = $uri->getScheme(); 
    $host = $uri->getHost(); 
    $base = sprintf('%s://%s', $scheme, $host); 

    // $base would be http://domain.com 
} 

या यदि आप सब कुछ छोटा करने से परहेज नहीं करते आप दो पंक्तियों में यह कर सकता है:

public function indexAction() 
{ 
    $uri = $this->getRequest()->getUri(); 
    $base = sprintf('%s://%s', $uri->getScheme(), $uri->getHost()); 
} 
+0

सुंदर समाधान – albert

6

मुझे यकीन नहीं है कि कोई मूल तरीका है लेकिन आप उदाहरण Request से उदाहरण का उपयोग कर सकते हैं। आप एक समाधान के रूप में इस टुकड़ा ले जा सकते हैं जब तक आप एक बेहतर समाधान मिल गया है:

$basePath = $this->getRequest()->getBasePath(); 
$uri = new \Zend\Uri\Uri($this->getRequest()->getUri()); 
$uri->setPath($basePath); 
$uri->setQuery(array()); 
$uri->setFragment(''); 
$baseUrl = $uri->getScheme() . '://' . $uri->getHost() . '/' . $uri->getPath(); 

इस नियंत्रक संदर्भ में काम करता है। ध्यान दें कि लाइन 2 में, अनुरोध से उरी उदाहरण क्लोन किया गया है ताकि अनुरोध के यूरी इंस्टेंस को सीधे संशोधित न किया जा सके (साइड इफेक्ट्स से बचने के लिए)।

मैं इस समाधान से खुश नहीं हूं लेकिन कम से कम, यह एक है।

// संपादित करें: पथ जोड़ने के लिए भूल गए, तय!

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