Yanıtlar:
Bunu yapmanın en kolay yolu, beta5'te sunulan Params eklentisini kullanmak olacaktır . Farklı parametre türlerine erişimi kolaylaştırmak için yardımcı yöntemlere sahiptir. Her zaman olduğu gibi , testleri okumak , bir şeyin nasıl kullanılması gerektiğini anlamak için değerli olabilir.
Bir denetleyicide adlandırılmış bir parametrenin değerini almak için, aradığınız parametre türüne uygun yöntemi seçmeniz ve adı iletmeniz gerekir.
$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
Bu yöntemlerin tümü, verilen ada sahip bir parametre bulunmazsa döndürülecek varsayılan değerleri de destekler.
$orderBy = $this->params()->fromQuery('orderby', 'name');
Ziyaret ederken http://example.com/?orderby=birthdate ,
$ orderBy değeri olacak doğum .
Ziyaret ederken http://example.com/ ,
$ orderBy olacak varsayılan değer adını .
Bir türdeki tüm parametreleri almak için, hiçbir şeyi iletmeyin ve Params eklentisi, adları anahtar olarak olan bir değerler dizisi döndürür.
$allGetValues = $this->params()->fromQuery(); // empty method call
Http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues ziyaret edildiğinde aşağıdaki gibi bir dizi olacaktır
array(
'orderby' => 'birthdate',
'filter' => 'hasphone',
);
Params eklentisinin kaynak kodunu kontrol ederseniz , daha tutarlı parametre alımına izin vermek için diğer denetleyicilerin etrafında ince bir paket olduğunu göreceksiniz. Herhangi bir nedenle bunlara doğrudan erişmek istiyorsanız / ihtiyacınız varsa, bunun nasıl yapıldığını kaynak kodda görebilirsiniz.
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
NOT: Süper küreselleri $ _GET, $ _POST vb. Kullanmış olabilirsiniz, ancak bu önerilmez.
Örneğin, gönderilen bir json dizesini almanın en kolay yolu, 'php: // input' içeriğini okumak ve ardından kodunu çözmek. Örneğin basit bir Zend rotam vardı:
'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/save-json/',
'defaults' => array(
'controller' => 'CDB\Controller\Index',
'action' => 'save-json',
),
),
),
ve Angular'ın $ http.post'unu kullanarak ona veri göndermek istedim. Gönderi iyiydi ama Zend'deki geri alma yöntemi
$this->params()->fromPost('paramname');
bu durumda hiçbir şey almadım. Bu yüzden benim çözümüm, $ _POST gibi her türlü yöntemi ve yukarıda belirtilen diğer yöntemleri denedikten sonra, 'php: //' den okumaktı:
$content = file_get_contents('php://input');
print_r(json_decode($content));
Sonunda json dizimi aldım. Bu yardımcı olur umarım.
$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;
İçerik türünüz "application / -www-form-urlencoded" ise, yukarıdaki yöntemlerin tümü sorunsuz çalışacaktır. Ancak içerik türünüz "application / json" ise, o zaman aşağıdakileri yapmanız gerekir:
$ params = json_decode (file_get_contents ('php: // input'), doğru); print_r ($ parametreler);
Sebep: https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make'de # 7'ye bakın
Örneğin kontrolör dışında eklentiye erişiminiz yoksa servicelocator'dan bunun gibi params alabilirsiniz.
//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')