Zend Framework (post, get, vb) girişini Taşıma

4 Cevap php

zend kodu ve tüm kod im yeniden faktoring php $_GET["this"] ve $_POST["that"] doludur. Her zaman daha phpish $this->_request->getPost('this') ve $this->_request->getQuery('that') (bu getGet en GetQuery insteado ile çok mantıklı değildir olmak üzere) kullandık.

Benim yöntemi mantain güvenli / iyi / daha kolay olsaydı Yani ben merak ediyorum. Ben istek nesne bunu alışkanlık beri kendi girişini doğrulamak gerekir Zend Framework belgelerinde okudum.

Bu 2 soru ile beni bırakır:

  • Ne bu iki en iyi? (Veya eğer gidecekseniz başka daha iyi bir yol)
  • Bu yöntemler ile php girişi doğrulamak için en iyi yöntem nedir?

Teşekkürler!

4 Cevap

Ben genellikle kullanmak $ this-> _REQUEST-> getParams (); posta veya URL parametreleri ya almak. Sonra doğrulama ve filtreleme yapmak için Zend_Filter_Input kullanın. GetParams () doğrulama yapmaz.

Eğer Zend Doğrulayıcıları (ya da siz de kendi yazabilirsiniz) kullanılarak, uygulama seviyesi doğrulama yapabilirsiniz Zend_Filter_Input kullanma. Örneğin, 'ay' alanı bir sayıdır emin olabilirsiniz:

$data = $this->_request->getParams();

$validators = array(
    'month'   => 'Digits',
);

$input = new Zend_Filter_Input($filters, $validators, $data);

Brian'ın cevabı genişletme.

Eğer belirtildiği gibi siz de $this->_request->getPost() ve $this->_request->getQuery() kontrol edebilirsiniz. Eğer genelleme varsa getParams(), bu tür $_REQUEST superglobal kullanmak gibi ve ben o güvenlik açısından kabul edilebilir olduğunu sanmıyorum.

Zend_Filter Ek, ​​ayrıca gerekli döküm basit PHP kullanabilirsiniz.

Örneğin:

$id = (int) $this->_request->getQuery('id');

Diğer değerler için, daha karmaşık alır, bu yüzden emin örneğin yapmak alıntı DB sorguları (Zend_Db, alıntı tanımlayıcıları görmek, $db->quoteIdentifier()) ve görünümlerde $this->escape($var); içeriği kaçmak için kullanabilirsiniz.

Sen get / post veri için bir tek beden uyan tüm doğrulama işlevi yazamıyor. Bazı durumlarda olduğu gibi bir tamsayı ve diğerleri örneğin bir tarih olması için bir alan gerektirir. Hiçbir giriş doğrulama zend çerçevesinde var nedeni budur.

Sen bunu ihtiyacınız yerinde doğrulama kodunu yazmak zorunda olacak. Siz tabii ki bazı yardımcı yöntemler yazabilirsiniz, ancak getPost () kendisi tarafından sizin için tüm şeyler doğrulamak için bekleyemeyiz ...

Ve size wan't verileri, ne ilgilendirir olmamalı üzerine oradan ona olur olsun bu iş, bir şey doğrulamak için bile getPost / GetQuery 's yerdir değildir.

Her zaman daha phpish $this->_request->getPost('this') ve $this->_request->getQuery('that') (bu getGet en GetQuery insteado ile çok mantıklı değildir olmak üzere) kullandık.

Ne bu iki en iyi? (Veya eğer gidecekseniz başka daha iyi bir yol)

Seçimine sadece hızlı bir açıklama getQuery(). Ifadeler seçim o oraya nasıl, değil ne tür verilerin geliyor. GET ve POST POST isteği, "post veri" olarak bilinen bölümünde durumunda, dahil olmak üzere, her türlü bilgi taşıyan, sadece istek yöntemleri vardır. GET isteği böyle bir blok var, onu taşıyan herhangi bir değişken veri (sonra? Parçası) url sorgu dizesi bir parçasıdır.

getPost(), bir POST isteği sonrası veri bölümünden veri alırken Yani, getQuery(), bir GET veya POST isteği (yanı sıra diğer HTTP isteği ya sorgu dizesi verileri alır yöntemleri).

(İstekler DB satır değiştiren gibi bir yan etkisi üretebilir şey, için kullanılmamalıdır GET Not)

Yani, ilk soruya cevap olarak, getPost() kullanın ve getQuery() yöntemleri, bu yol, nereye veri kaynağı (eğer umurumda değil, {[emin olabilirsiniz (2)]} de) çalışır, ancak ek veri içerebilir.

Bu yöntemler ile php girişi doğrulamak için en iyi yöntem nedir?

Eğer first kullanmak nerede girişi doğrulamak için en iyi yerdir. Yani getParams() onu çekin, getPost(), demek ki, ya getQuery(). Bu şekilde, veri nereye ihtiyaç için her zaman doğru olduğunu ve onu geçmek, size güvenli olduğunu biliyorum. Sadece güvenli olması için, başka Denetleyicisi (veya Controller Eylem) onu geçmek eğer, muhtemelen yine orada kontrol etmelisiniz, unutmayın. Bunu nasıl uygulamanıza bağlıdır, ama yine de kontrol edilmesi gerekir.