7

मैं फू नियंत्रक में एक कार्य विधि है जो मानकों की आवश्यकता है:ZF2: प्लगइन को आगे बढ़ाने के लिए पैरामीटर कैसे पास करें, जिसे मैं उस विधि में प्राप्त कर सकता हूं जिसे मैं उन्हें अग्रेषित करता हूं?

public function fooAction($one, $two) { 
    $a = one; 
    $b = $two; 
} 

और मैं कुछ बू नियंत्रक के अन्य विधि से उस विधि को अग्रेषित करने के लिए की जरूरत है। और उन पैरामीटर में से एक संदर्भ पैरामीटर द्वारा होना चाहिए।

$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo')); 

कोई किसी भी अतिरिक्त पैरामीटर: केवल उदाहरण the manual है कि यह है। लेकिन वे लिखते हैं:

$ पैरामीटर जो के साथ इस विशेष अनुरोध के प्रयोजनों के लिए एक RouteMatch वस्तु को देखने के लिए मानकों का एक वैकल्पिक सरणी है।

तो, मैं करने की कोशिश की:

$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                 'action' => 'boo', 
                 'one' => &$one, 
                 'two' => $two, 
               )); 

लेकिन यह काम नहीं करता।

क्या नियंत्रक को आगे बढ़ाने के लिए अतिरिक्त पैरामीटर पास करने का कोई तरीका है?

युपीडी:

ये भी काम नहीं करते:

$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                 'action' => 'boo', 
                 'params' => array(
                  'one' => &$one, 
                  'two' => $two, 
                ))); 


$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                 'action' => 'boo', 
                 'options' => array(
                  'one' => &$one, 
                  'two' => $two, 
                ))); 

युपीडी 2:

मैं अभी भी (के साथ पैरामीटर पास करने के कार्यक्षमता मैं चाहता हूँ नहीं मिल सकता है forward प्लगइन) लेकिन मुझे अन्य समाधान मिल गए। forward प्लगइन कॉल करने से पहले मैं Request वस्तु को चर सेट और forward के बाद मैं अपने बू \ नियंत्रक \ BooController की मेरी बू कार्रवाई में Request से उन्हें प्राप्त:

// in Foo::fooAction 
$this->getRequest()->one = &$one; 
$this->getRequest()->two = $two; 
$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo')); 

// in Boo::booAction 
$a = $this->getRequest()->one; 
$b = $this->getRequest()->two; 

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

युपीडी 3 और अंतिम:

मैं अंत में, जहां वे मानकों मैं forward प्लगइन के साथ पारित छिपाने के लिए तय कर लिया है पाया। उन्होंने उन्हें RouteMatch ऑब्जेक्ट में रखा।

- यह अनुमान लगाने के लिए प्रयास करें कि हमने आपके पैराम्स को छुपाया है ... ओह हाँ, वे RouteMatch में हैं, निश्चित रूप से वे वहां हैं, क्या आपको और नहीं लगता है?

और मैन्युअल के forward प्लगइन अनुभाग में कोई भी जानकारी नहीं!

पैरामीटर प्राप्त करने के लिए, मैं में यह करने के लिए है मेरी BooController::booAction:

$param = $this->getEvent()->getRouteMatch()->getParam('nameOfParam'); 
+0

'बूओ' एक वैध नियंत्रक-उपनाम है? जैसा कि दस्तावेज 'बू' द्वारा इंगित किया गया है या तो पूरी तरह से योग्य क्लासनाम (उदाहरण के लिए 'मॉड्यूलर \ कंट्रोलर \ बू कंट्रोलर') होना चाहिए या यह इस कॉन्फ़िगरर के लिए उपनाम होना चाहिए जिसे आप अपनी कॉन्फ़िगरेशन – Sam

+0

के अंदर परिभाषित करते हैं हां, यह पूरी तरह से योग्य क्लासनाम है , यह मेरे पास 'बू \ नियंत्रक \ बू' है। मैंने इसे कम करने के लिए इस सवाल में लिखा था। अस्पष्टता से बचने के लिए अभी बदलें। – Green

+1

यह अभी भी केवल एक उपनाम है। यह मानना ​​सुरक्षित है कि आपने 'बू \ नियंत्रक \ बूओ' => 'बू \ नियंत्रक \ बू नियंत्रक' से एक invokables उपनाम सेट अप किया है? इसके अलावा आपका पहला दृष्टिकोण सही है। यदि पैरा मौजूद हैं तो आप कैसे परीक्षण करते हैं? क्या वे मार्ग-विन्यास में भी परिभाषित हैं? Tihs ब्लॉगपोस्ट उस कार्यक्षमता का उपयोग करता है जिसे आप बहुत खोज रहे हैं: http://www.michaelgallego.fr/blog/2012/10/06/how-to-replace-the-action-helper-in-zf-2-and बनाओ-महान widgetized-सामग्री / – Sam

उत्तर

6

आप एक कंटेनर वर्ग बना सकते हैं और

module.conf में दोनों नियंत्रकों में उपयोग कर सकते हैं

public function getServiceConfig() 
{ 
    return array(
     'invokables' => array(
      'my_handy_container'  => 'path\container_class_name', 
     ) 
    ); 
} 

दोनों नियंत्रकों में एक गेटर बनाएँ:

public function getMyHandyContainer() 
{ 
    if (!$this->myHandyContainer) { 
     $this->myHandyContainer = $this->getServiceLocator()->get('my_handy_container'); 
    } 
    return $this->myHandyContainer; 
} 

और का उपयोग कर इसे कहते:

$myContainer = $this->getMyHandyContainer()->myHandyContainer; 
$myContainer->foo = 5; // set something 

ZF2 तरह से पारित करने के लिए आगे

का उपयोग कर वार्स गुजर विधि में कार्य करें:

return $this->forward()->dispatch('controller_name', [ 
    'action' => 'whatever', 
    'varname' => $value, 
    'varname2' => $value2 
]); 

लागू नियंत्रक विधि में, कार्य करें:

$param2 = $this->params()->fromRoute('varname2',false); 
10

पैरामीटर प्लगइन का उपयोग करने के लिए नहीं क्यों?

यह मेरे लिए काम करता है:

public function indexAction() { 

     $object = new SomeObject(); 

     return $this->forward()->dispatch('Application\Controller\Index', [ 
       'action'  => 'show', 
       'myObject' => $object, 
     ]); 
    } 

public function showAction() { 

     $object = $this->params('myObject'); 

     var_dump($object); 

     return []; 
} 
1

प्रश्न के लिए धन्यवाद, मुझे एक बहुत मदद की। पाया सभी प्राप्त करने के लिए एक आसान तरीका अग्रेषित करने के लिए पारित कर दिया params() -> प्रेषण (...)। नियंत्रक की कार्रवाई विधि में: आगे में $ के रूप में डेटा पारित कर दिया के रूप में

$params = $this->params()->fromRoute(); 

रिटर्न सरणी $ डेटा() -> प्रेषण ($ controllerName, $ डेटा)।

2

सोचा मैं एक और विकल्प है कि मेरे लिए काम करता जोड़ना होगा।

आप बस सीधे आगे समारोह के माध्यम से परम गुजरती हैं और दूसरे छोर पर उन तक पहुंचने की routeMatch फ़ंक्शन का उपयोग कर सकते हैं।

return $this->forward() 
      ->dispatch('Module\Controller\Foo', array(
              'action' => 'bas', 
              'id' => 6) 
              ); 

इस प्रक्रिया में तो आईडी परम

$myParam = (int) $this->getEvent()->getRouteMatch()->getParam('id'); 

सुनिश्चित नहीं हैं कि अगर यह आपके आवश्यकताओं को पूरा उपयोग करने के लिए निम्नलिखित कोड का उपयोग कर सकते में फू नियंत्रक, basAction के पास है - लेकिन के लिए काम करता मुझे।

1

Here in the official ZF2 documentation लिखा है यह वास्तव में कैसे काम करता है:

$params जो के साथ इस विशेष अनुरोध के प्रयोजनों के लिए एक RouteMatch वस्तु बीज के मापदंडों के एक वैकल्पिक सरणी है। मापदंडों मतलब config में मार्ग पहचानकर्ता के लिए अपने कुंजी से मिलान किया जाएगा (अन्यथा न खाने वाले कुंजी अनदेखा किया जाता है)

तो इस तरह से पारित:

$params = array(
    'foo' => 'foo', 
    'bar' => 'bar' 
); 
$this->forward()->dispatch('My\Controller', $params) 

और फिर आप में अपने मार्ग मैच पैरामीटर प्राप्त कर सकते हैं अपने My\Controller सामान्य रूप से की तरह:

$foo = $this->params()->fromRoute('foo'); 
$bar = $this->params()->fromRoute('bar'); 

यहाँ एक अच्छा उनके नियंत्रक के भीतर मानकों तक पहुँचने के साथ संघर्ष कर लोगों के लिए this CheatSheet से सिंहावलोकन।

$this->params()->fromPost('foo'); //POST 
$this->params()->fromQuery('foo'); //GET 
$this->params()->fromRoute('foo'); //RouteMatch 
$this->params()->fromHeader('foo');//Header 
$this->params()->fromFiles('foo'); //Uploaded file