Zend फ्रेमवर्क 2 में मार्ग, पोस्ट, गेट आदि कैसे प्राप्त करें


98

मैं zf2 में पेज अनुरोध से संबंधित विभिन्न पैरामीटर कैसे प्राप्त कर सकता हूं? जैसे पोस्ट / पैरामीटर प्राप्त करें, एक्सेस किया जा रहा मार्ग, हेडर भेजे गए और अपलोड की गई फाइलें।

जवाबों:


205

सबसे आसान तरीका है कि बीटा 5 में पेश किए गए परमेस प्लगइन का उपयोग करना होगा । इसमें विभिन्न प्रकार के मापदंडों का उपयोग करना आसान बनाने के लिए उपयोगिता विधियां हैं। हमेशा की तरह, परीक्षण पढ़ने से यह समझने के लिए मूल्यवान साबित हो सकता है कि कुछ का उपयोग कैसे किया जाना चाहिए।

एकल मान प्राप्त करें

किसी नियंत्रक में नामित पैरामीटर का मान प्राप्त करने के लिए, आपको उस प्रकार के पैरामीटर के लिए उपयुक्त विधि का चयन करना होगा जिसे आप देख रहे हैं और नाम में पास करें।

उदाहरण:

$this->params()->fromPost('paramname');   // From POST
$this->params()->fromQuery('paramname');  // From GET
$this->params()->fromRoute('paramname');  // From RouteMatch
$this->params()->fromHeader('paramname'); // From header
$this->params()->fromFiles('paramname');  // From file being uploaded

 

डिफ़ॉल्ट मान

ये सभी विधियाँ डिफ़ॉल्ट मानों का भी समर्थन करती हैं जो दिए गए नाम के साथ कोई पैरामीटर नहीं मिलने पर वापस आ जाएंगे।

उदाहरण:

$orderBy = $this->params()->fromQuery('orderby', 'name');

पर जाकर जब http://example.com/?orderby=birthdate , $ orderBy मूल्य होगा जन्मतिथि
पर जाकर जब http://example.com/ , $ orderBy होगा डिफ़ॉल्ट मूल्य नाम
 

सभी पैरामीटर प्राप्त करें

एक प्रकार के सभी मापदंडों को प्राप्त करने के लिए, बस किसी भी चीज़ में पास न करें और परमेस प्लगइन अपने नामों के साथ कुंजियों के रूप में मानों की एक सरणी लौटाएगा।

उदाहरण:

$allGetValues = $this->params()->fromQuery(); // empty method call

जब http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues पर जाएं तो एक सरणी पसंद आएगी

array(
    'orderby' => 'birthdate',
    'filter'  => 'hasphone',
);

 

Params प्लगइन का उपयोग नहीं

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

उदाहरण:

$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');

नोट: आप सुपरग्लोबल्स $ _GET, $ _POST आदि का उपयोग कर सकते थे, लेकिन यह हतोत्साहित किया गया था।


4
कॉलिंग पैरामेट्स प्लगइन सीधे भी संभव है, यह fromRoute का एक शॉर्टकट है ():$this->params('key', 'default')
Robin

@ रॉबिन जो सच है। ध्यान दें कि आप इसका उपयोग सभी मार्ग मापदंडों को लाने के लिए नहीं कर सकते हैं, क्योंकि इसे बिना किसी पैरामीटर के कॉल करने से परमेस प्लग इन हो जाएगा और रूट स्टफ नहीं।
मत्स्येमन

1
इकाई परीक्षण टिप्पणी + लिंक के लिए +1। कुछ कारणों से यूनिट परीक्षणों की जांच करने के लिए कुछ सोचते हैं।
Xunnamius

4

उदाहरण के लिए, पोस्ट किए गए जोंस स्ट्रिंग को प्राप्त करने का सबसे आसान तरीका, 'php: // input' की सामग्री को पढ़ना है और फिर इसे डीकोड करना है। उदाहरण के लिए मेरे पास एक सरल मार्ग था:

'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route'    => '/save-json/',
                'defaults' => array(
                    'controller' => 'CDB\Controller\Index',
                    'action'     => 'save-json',
                ),
            ),
        ),

और मैं इसे Angular's $ http.post का उपयोग करके डेटा पोस्ट करना चाहता था। पोस्ट ठीक था लेकिन Zend में रीट्रोव मेथड था

$this->params()->fromPost('paramname'); 

इस मामले में कुछ नहीं मिला। इसलिए मेरा समाधान $ _POST जैसी सभी प्रकार की विधियों और ऊपर बताई गई अन्य विधियों को 'php' से पढ़ने के बाद था: //:

$content = file_get_contents('php://input');
print_r(json_decode($content));

मुझे अंत में अपना json सरणी मिला। उम्मीद है की यह मदद करेगा।


1
यदि आपको कच्चे POST बॉडी की आवश्यकता है तो अनुरोध ऑब्जेक्ट के getContent () का उपयोग करें। एक नियंत्रक से, आप कर सकते हैं:$content = $this->getRequest()->getContent()
टोरिन फिनमन्नन

ZF2 पर हम URL पैरामीटर को कैसे प्राप्त कर सकते हैं ?name=mike?
स्टीफन

1
require_once 'lib/Zend/Loader/StandardAutoloader.php';
$loader = new Zend\Loader\StandardAutoloader(array('autoregister_zf' => true));

$loader->registerNamespace('Http\PhpEnvironment', 'lib/Zend/Http'); 

// Register with spl_autoload:
$loader->register();

$a = new Zend\Http\PhpEnvironment\Request();
print_r($a->getQuery()->get()); exit;

0

उपरोक्त सभी विधियाँ ठीक काम करेंगी यदि आपकी सामग्री-प्रकार "अनुप्रयोग / -www-form-urlencoded" है। लेकिन अगर आपका कंटेंट-टाइप "एप्लिकेशन / जसन" है, तो आपको निम्नलिखित कार्य करने होंगे:

$ params = json_decode (file_get_contents ('php: // input'), सच); print_r ($ पैरामीटर);

कारण: https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make में # 7 देखें


0

यदि आपके पास कंट्रोलर के बाहर प्लगइन के लिए कोई पहुंच नहीं है, तो आप इस तरह सर्विसिलेटर से परम प्राप्त कर सकते हैं

//from POST
$foo = $this->serviceLocator->get('request')->getPost('foo'); 
//from GET
$foo = $this->serviceLocator->get('request')->getQuery()->foo;
//from route
$foo = $this->serviceLocator->get('application')->getMvcEvent()->getRouteMatch()->getParam('foo');
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.