Câu trả lời:
Cách dễ nhất để làm điều đó là sử dụng plugin Params , được giới thiệu trong bản beta5. Nó có các phương thức tiện ích để giúp bạn dễ dàng truy cập các loại tham số khác nhau. Như mọi khi, việc đọc các bài kiểm tra có thể chứng minh giá trị để hiểu cách sử dụng thứ gì đó.
Để nhận giá trị của một tham số đã đặt tên trong bộ điều khiển, bạn sẽ cần chọn phương thức thích hợp cho loại tham số bạn đang tìm kiếm và chuyển vào tên.
$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
Tất cả các phương thức này cũng hỗ trợ các giá trị mặc định sẽ được trả về nếu không tìm thấy tham số nào có tên đã cho.
$orderBy = $this->params()->fromQuery('orderby', 'name');
Khi truy cập http://example.com/?orderby=birthdate ,
$ orderBy sẽ có giá trị ngày sinh .
Khi truy cập http://example.com/ ,
$ orderBy sẽ có tên giá trị mặc định .
Để nhận tất cả các tham số của một loại, chỉ cần không chuyển bất kỳ thứ gì vào và plugin Params sẽ trả về một mảng giá trị với tên của chúng là khóa.
$allGetValues = $this->params()->fromQuery(); // empty method call
Khi truy cập http://example.com/?orderby=birthdate&filter=hasphone $ allGetValues sẽ là một mảng như
array(
'orderby' => 'birthdate',
'filter' => 'hasphone',
);
Nếu bạn kiểm tra mã nguồn cho plugin Params, bạn sẽ thấy rằng nó chỉ là một lớp bọc mỏng xung quanh các bộ điều khiển khác để cho phép truy xuất tham số nhất quán hơn. Nếu vì lý do nào đó bạn muốn / cần truy cập trực tiếp vào chúng, bạn có thể xem trong mã nguồn cách thực hiện.
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
LƯU Ý: Bạn có thể đã sử dụng superglobals $ _GET, $ _POST, v.v., nhưng điều đó không được khuyến khích.
Ví dụ, cách dễ nhất để lấy một chuỗi json đã đăng là đọc nội dung của 'php: // input' và sau đó giải mã nó. Ví dụ, tôi có một tuyến đường Zend đơn giản:
'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/save-json/',
'defaults' => array(
'controller' => 'CDB\Controller\Index',
'action' => 'save-json',
),
),
),
và tôi muốn đăng dữ liệu lên nó bằng cách sử dụng $ http.post của Angular. Bài đăng tốt nhưng phương pháp truy xuất trong Zend
$this->params()->fromPost('paramname');
không nhận được bất cứ điều gì trong trường hợp này. Vì vậy, giải pháp của tôi là, sau khi thử tất cả các loại phương thức như $ _POST và các phương thức khác được nêu ở trên, để đọc từ 'php: //':
$content = file_get_contents('php://input');
print_r(json_decode($content));
Cuối cùng thì tôi đã có mảng json của mình. Hi vọng điêu nay co ich.
$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;
Tất cả các phương pháp trên sẽ hoạt động tốt nếu loại nội dung của bạn là "application / -www-form-urlencoded". Nhưng nếu loại nội dung của bạn là "application / json" thì bạn sẽ phải làm như sau:
$ params = json_decode (file_get_contents ('php: // input'), true); print_r ($ params);
Lý do: Xem # 7 tại https://www.toptal.com/php/10-most-common-mistakes-php-programmers-make
Nếu Bạn không có quyền truy cập vào plugin, chẳng hạn như bên ngoài bộ điều khiển, Bạn có thể nhận các thông số từ bộ định vị dịch vụ như thế này
//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')