Jawaban:
Cara termudah untuk melakukannya adalah dengan menggunakan plugin Params , yang diperkenalkan di beta5. Ini memiliki metode utilitas untuk membuatnya mudah mengakses berbagai jenis parameter. Seperti biasa, membaca tes terbukti bermanfaat untuk memahami bagaimana sesuatu seharusnya digunakan.
Untuk mendapatkan nilai parameter bernama dalam pengontrol, Anda harus memilih metode yang sesuai untuk jenis parameter yang Anda cari dan meneruskan namanya.
$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
Semua metode ini juga mendukung nilai default yang akan dikembalikan jika tidak ada parameter dengan nama yang diberikan ditemukan.
$orderBy = $this->params()->fromQuery('orderby', 'name');
Saat mengunjungi http://example.com/?orderby=birthdate ,
$ orderBy akan memiliki nilai tanggal lahir .
Saat mengunjungi http://example.com/ ,
$ orderBy akan memiliki nama nilai default .
Untuk mendapatkan semua parameter dari satu jenis, jangan berikan apa pun dan plugin Params akan mengembalikan array nilai dengan namanya sebagai kunci.
$allGetValues = $this->params()->fromQuery(); // empty method call
Saat mengunjungi http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues akan menjadi larik seperti
array(
'orderby' => 'birthdate',
'filter' => 'hasphone',
);
Jika Anda memeriksa kode sumber untuk plugin Params, Anda akan melihat bahwa itu hanya pembungkus tipis di sekitar pengontrol lain untuk memungkinkan pengambilan parameter yang lebih konsisten. Jika Anda karena suatu alasan ingin / perlu mengaksesnya secara langsung, Anda dapat melihat di kode sumber bagaimana hal itu dilakukan.
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
CATATAN: Anda bisa saja menggunakan superglobals $ _GET, $ _POST dll, tetapi itu tidak disarankan.
Cara termudah untuk mendapatkan string json yang diposting, misalnya, adalah membaca konten 'php: // input' dan kemudian mendekodekannya. Misalnya saya punya rute Zend sederhana:
'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/save-json/',
'defaults' => array(
'controller' => 'CDB\Controller\Index',
'action' => 'save-json',
),
),
),
dan saya ingin mengirim data ke sana menggunakan $ http.post Angular. Posting itu baik-baik saja tetapi metode retrive di Zend
$this->params()->fromPost('paramname');
tidak mendapatkan apa-apa dalam kasus ini. Jadi solusi saya adalah, setelah mencoba semua jenis metode seperti $ _POST dan metode lain yang disebutkan di atas, membaca dari 'php: //':
$content = file_get_contents('php://input');
print_r(json_decode($content));
Saya mendapatkan array json saya pada akhirnya. Semoga ini membantu.
$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;
Semua metode di atas akan bekerja dengan baik jika tipe konten Anda adalah "application / -www-form-urlencoded". Tetapi jika tipe konten Anda adalah "application / json" maka Anda harus melakukan hal berikut:
$ params = json_decode (file_get_contents ('php: // input'), true); print_r ($ params);
Alasan: Lihat # 7 di https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make
Jika Anda tidak memiliki akses ke plugin misalnya di luar controller Anda bisa mendapatkan params dari servicelocator seperti ini
//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')