জেন্ড ফ্রেমওয়ার্ক 2 এ কীভাবে রুট, পোস্ট, প্যারামিতিগুলি অ্যাক্সেস করবেন


98

আমি কীভাবে zf2 এ পৃষ্ঠার অনুরোধের সাথে সম্পর্কিত বিভিন্ন পরামিতি পেতে পারি? পোস্ট / প্যারামিটারগুলির মতো, রুটটি অ্যাক্সেস করা হচ্ছে, শিরোনাম প্রেরণ করা হয়েছে এবং ফাইল আপলোড করা হয়েছে।

উত্তর:


206

এটি করার সহজতম উপায় হ'ল বিটা 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 visiting সমস্ত গেটভ্যালুগুলি দেখার মতো একটি অ্যারে হবে

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

 

প্যারাম প্লাগইন ব্যবহার করা হচ্ছে না

যদি আপনি সোর্স কোডটি পরীক্ষা করেন প্যারাম প্লাগইনের জন্য দেখতে পাবেন যে এটি আরও নিয়মিত প্যারামিটার পুনরুদ্ধারের জন্য অনুমতি দেওয়ার জন্য অন্যান্য নিয়ন্ত্রকদের কাছাকাছি কেবল একটি পাতলা মোড়ক। যদি আপনি কোনও কারণে সরাসরি এগুলি অ্যাক্সেস করতে চান / প্রয়োজন থাকেন তবে এটি কীভাবে হয়েছে তা আপনি সোর্স কোডটিতে দেখতে পারেন।

উদাহরণ:

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

দ্রষ্টব্য: আপনি সুপারগ্লোবালগুলি $ _গেট, $ _POST ইত্যাদি ব্যবহার করতে পারতেন তবে তা নিরুত্সাহিত।


4
প্যারাম প্লাগইনকে সরাসরি কল করাও সম্ভব, এটি রোউট () থেকে শর্টকাট:$this->params('key', 'default')
রবিন

@ রবিন যে সত্য। নোট করুন যে আপনি এটি সমস্ত রুটের প্যারামিটারগুলি আনতে ব্যবহার করতে পারবেন না, কারণ কোনও পরামিতি ছাড়াই এটি কল করা প্যারাম প্লাগইন ফিরিয়ে দেবে এবং রুট স্টাফ নয়।
ম্যাটসেম্যান

4
ইউনিট পরীক্ষার জন্য +1 মন্তব্য + লিঙ্ক। খুব অল্প কিছু কারণে ইউনিট পরীক্ষা করে দেখুন।
সুন্নামিয়াস

4

পোস্ট করা জসন স্ট্রিংয়ের সহজতম উপায়, উদাহরণস্বরূপ, 'পিএইচপি: // ইনপুট' এর সামগ্রীগুলি পড়া এবং তারপরে এটি ডিকোড করা। উদাহরণস্বরূপ আমার একটি সাধারণ জেন্ড রুট ছিল:

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

এবং আমি অ্যাংুলারের $ http.post ব্যবহার করে এটিতে ডেটা পোস্ট করতে চেয়েছিলাম। পোস্টটি ঠিক ছিল তবে জেন্ডে পুনরুদ্ধার পদ্ধতি

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

এক্ষেত্রে কিছুই পেল না। সুতরাং আমার সমাধানটি ছিল, 'পিএইচপি: //' থেকে পড়ার জন্য kinds _POST এবং উপরে বর্ণিত অন্যান্য পদ্ধতিগুলির মতো সমস্ত ধরণের পদ্ধতির চেষ্টা করার পরে:

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

আমি শেষ পর্যন্ত আমার জসন অ্যারে পেয়েছি। আশাকরি এটা সাহায্য করবে.


4
আপনার যদি কাঁচা পোস্টের বডি প্রয়োজন হয় তবে অনুরোধের অবজেক্টের getContent () ব্যবহার করুন। একটি নিয়ামক থেকে আপনি এটি করতে পারেন:$content = $this->getRequest()->getContent()
টরিন ফিনেমন

জেডএফ 2 তে কীভাবে আমরা ইউআরএল প্যারামিটার আকারে পুনরুদ্ধার করতে পারি ?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-ফর্ম-urlencoded" হয়। তবে যদি আপনার বিষয়বস্তুর ধরণটি "অ্যাপ্লিকেশন / জসন" হয় তবে আপনাকে নিম্নলিখিতগুলি করতে হবে:

ms প্যারামগুলি = json_decode (ফাইল_জেট_কন্টেন্টস ('পিএইচপি: // ইনপুট'), সত্য); মুদ্রণ_আর (ms প্যারাম);

কারণ: 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');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.