回答:
これを行う最も簡単な方法は、beta5で導入されたParamsプラグインを使用することです。さまざまなタイプのパラメータに簡単にアクセスできるユーティリティメソッドがあります。いつものように、テストを読むことは、何かがどのように使用されることになっているのかを理解するために貴重であることがわかります。
コントローラで名前付きパラメータの値を取得するには、探しているパラメータのタイプに適したメソッドを選択し、名前を渡す必要があります。
$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がありますデフォルト値の名前を。
1つのタイプのすべてのパラメーターを取得するには、何も渡さないでください。Paramsプラグインは、名前をキーとして値の配列を返します。
$allGetValues = $this->params()->fromQuery(); // empty method call
訪問するときhttp://example.com/?orderby=birthdate&filter=hasphone $ allGetValuesは、のような配列になります
array(
'orderby' => 'birthdate',
'filter' => 'hasphone',
);
Paramsプラグインのソースコードを確認すると、他のコントローラーを包む薄いラッパーであり、より一貫したパラメーターの取得が可能です。何らかの理由でそれらに直接アクセスする必要がある場合は、ソースコードでその方法を確認できます。
$this->getRequest()->getRequest('name', 'default');
$this->getEvent()->getRouteMatch()->getParam('name', 'default');
注:スーパーグローバル$ _GET、$ _ POSTなどを使用することもできますが、お勧めしません。
たとえば、投稿されたjson文字列を取得する最も簡単な方法は、「php:// input」の内容を読み取ってからデコードすることです。たとえば、私は単純なZendルートを持っていました:
'save-json' => array(
'type' => 'Zend\Mvc\Router\Http\Segment',
'options' => array(
'route' => '/save-json/',
'defaults' => array(
'controller' => 'CDB\Controller\Index',
'action' => 'save-json',
),
),
),
Angularの$ http.postを使用してデータを投稿したかった。投稿は問題ありませんでしたが、Zendの取得メソッド
$this->params()->fromPost('paramname');
この場合、何も取得されませんでした。したがって、私の解決策は、$ _ POSTや上記の他のメソッドなど、あらゆる種類のメソッドを試した後、「php://」から読み取ることでした。
$content = file_get_contents('php://input');
print_r(json_decode($content));
最後に、json配列を取得しました。お役に立てれば。
$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;
content-typeが "application / -www-form-urlencoded"の場合、上記のすべてのメソッドが正常に機能します。ただし、コンテンツタイプが「application / json」の場合は、次の操作を行う必要があります。
$ params = json_decode(file_get_contents( 'php:// input')、true); print_r($ params);
理由:https ://www.toptal.com/php/10-most-common-mistakes-php-programmers-makeの#7を参照してください
たとえばコントローラの外でプラグインにアクセスできない場合は、次のようにservicelocatorからパラメータを取得できます
//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')