जवाबों:
सबसे आसान तरीका है कि बीटा 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 प्लगइन के लिए स्रोत कोड की जांच करते हैं , तो आप देखेंगे कि यह अन्य नियंत्रकों के चारों ओर एक पतली आवरण है जो अधिक सुसंगत पैरामीटर पुनर्प्राप्ति के लिए अनुमति देता है। यदि आप किसी कारण से चाहते हैं / उन्हें सीधे एक्सेस करने की आवश्यकता है, तो आप स्रोत कोड में देख सकते हैं कि यह कैसे किया जाता है।
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
नोट: आप सुपरग्लोबल्स $ _GET, $ _POST आदि का उपयोग कर सकते थे, लेकिन यह हतोत्साहित किया गया था।
उदाहरण के लिए, पोस्ट किए गए जोंस स्ट्रिंग को प्राप्त करने का सबसे आसान तरीका, '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 सरणी मिला। उम्मीद है की यह मदद करेगा।
$content = $this->getRequest()->getContent()
?name=mike
?
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;
उपरोक्त सभी विधियाँ ठीक काम करेंगी यदि आपकी सामग्री-प्रकार "अनुप्रयोग / -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 देखें
यदि आपके पास कंट्रोलर के बाहर प्लगइन के लिए कोई पहुंच नहीं है, तो आप इस तरह सर्विसिलेटर से परम प्राप्त कर सकते हैं
//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');
$this->params('key', 'default')