2012-10-17 16 views
7

मेरा बुरा अंग्रेजी के लिए खेद से, मैं रूसकार्य नियंत्रक

से हूँ

Zend फ्रेमवर्क 2 ... नियंत्रक में नमूना सीखना शुरू किया, readAction():

use Zend\View\Helper\Url; 

.... 

$helperUrl = new Url(); 
$address = $helperUrl('news', array('action' => 'index')); 

नतीजतन, फेंका अपवाद:

Zend\View\Exception\RuntimeException 

File: 
    W:\home\zf2\vendor\zendframework\ 
     zendframework\library\Zend\View\Helper\Url.php:80 
Message: 
    No RouteStackInterface instance provided 

, मेरी मदद करें। मैं क्या गलत कर रहा हूँ?

उत्तर

12

आप नियंत्रक में व्यूथर का उपयोग नहीं कर सकते - और आपको इसकी आवश्यकता नहीं है। एक Url नियंत्रक प्लगइन भी है जो काफी समान करता है।

नियंत्रक प्लगइन्स invokable वर्ग हैं, तो आप उन्हें इस (नियंत्रक की कार्रवाई संदर्भ) की तरह उपयोग कर सकते हैं:

$url = $this->url()->fromRoute($route, $params, $options, $reuseMatchesParams); 

सभी पैरामीटर वैकल्पिक हैं। अधिक जानकारी के लिए, Zend\Mvc\Controller\Plugin\Url में कोड को चेक करें या docs पढ़ें।

+3

सच नहीं मदद करता है। आप कंट्रोलर में व्यू हेल्पर का उपयोग कर सकते हैं, लेकिन ओसीसी बहुत अच्छा विचार नहीं है: $ uVH = $ this-> getServiceLocator() -> get ('viewhelpermanager') -> get ('url') प्राप्त करें; $ रूट यूआरएल = $ uvh ('मार्ग-नाम', सरणी ('param1' => 'param1')); आदि –

3

हेल्पर्स और प्लगइन्स, जबकि उन्हें सीधे तत्काल किया जा सकता है, आमतौर पर नहीं होना चाहिए, क्योंकि वे आमतौर पर प्लगइन प्रबंधक द्वारा प्रबंधित होते हैं। PluginManager ServiceManager का उप-वर्ग है, और, इस तरह, प्लगइन निर्माण के आसपास बहुत सारी कार्यक्षमता प्रदान करता है, जिसमें मानक सहयोगियों के इंजेक्शन, निर्भरता इंजेक्शन प्रदान करने के लिए कारखानों का उपयोग, आदि शामिल हैं।

यूआरएल सहायक के मामले में, एक कारखाना है जो सुनिश्चित करता है कि इसमें कॉन्फ़िगर किया गया राउटर इंजेक्शन है - यदि आप इसे तुरंत चालू करते हैं, तो आपके पास यह नहीं होगा, और यह अपना काम नहीं कर पाएगा जैसा कि आपने देखा!

जैसा कि डैनियल ने नोट किया था, आप यह भी सुनिश्चित करना चाहते हैं कि आपको एक प्लगइन मिल रहा है जो संदर्भ के लिए उपयुक्त है। यदि आप नियंत्रक में हैं, तो यह देखने के लिए जांचें कि क्या नियंत्रक प्लगइन है जो आपके लिए काम करेगा। डैनियल ने अपनी पोस्ट में दस्तावेज़ों से जुड़ा हुआ है।

+0

आपने मुझे सिरदर्द से बचाया :-) –

0

मुझे पता है कि पहले से ही एक स्वीकार्य उत्तर है लेकिन मैं अभी भी मेरे जैसे शुरुआती बोझ को कम करने के लिए इसे पोस्ट करूंगा।

मैं दृश्य प्रस्तुतकर्ता के रूप में smarty का उपयोग करता हूं और smarty में आप विचारों में PHP कोड का उपयोग नहीं कर सकते हैं, इस प्रकार, सब कुछ नियंत्रक में किया जाना चाहिए, उन्हें चर में आवंटित करना और फिर उन्हें दृश्यों में भेजना।

आप इस का उपयोग कर सकते हैं:

$url = $this->url()->fromRoute('route',array('name'=>'route-name')); 

आप Zend 2 के ट्यूटोरियल का पालन कर रहे हैं, तो यह इस तरह होगा:

/zf2/index.php/album/add 
/zf2/index.php/album/edit 
/zf2/index.php/album/delete 
:

$url = $this->url()->fromRoute('album',array('action'=>'add')); 
$url = $this->url()->fromRoute('album',array('action'=>'edit')); 
$url = $this->url()->fromRoute('album',array('action'=>'delete')); 

इस के एक मूल्य होगा

जैसा कि आप देख सकते हैं, आपको सर्वर नाम जोड़ना होगा, जो आप मार्ग उत्पन्न करने से पहले इनका उपयोग करके कर सकते हैं यूआरएल:

$url = $uri = $this->getRequest()->getUri(); 
$url = sprintf('%s://%s', $uri->getScheme(), $uri->getHost()); 

कुल मिलाकर, कोड स्निपेट इस तरह दिखना चाहिए:

$url = $uri = $this->getRequest()->getUri(); 
$url = sprintf('%s://%s', $uri->getScheme(), $uri->getHost()); 
$url .= $this->url()->fromRoute('album',array('action'=>'add')); 

उत्पादन करने के लिए:

http://yourservername/zf2/index.php/album/add 

आशा इस शुरुआत zf2 उपयोगकर्ताओं

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