2012-08-22 5 views

答えて

187

これを行う最も簡単な方法は、beta5で導入されたParams pluginを使用することです。さまざまな種類のパラメータに簡単にアクセスできるユーティリティメソッドがあります。いつものように、the testsを読むことは、何かが使われるはずのことを理解する価値があることを証明することができます。

は、コントローラ内の指定されたパラメータの値を取得するには、単一の値

を取得し、あなたが探しているパラメータのタイプに適した方法を選択し、名前を渡す必要があります。

例:

$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デフォルトを持っています。  


は一種類のすべてのパラメータを取得するには、すべてのパラメータ

を取得し、ちょうど何も渡していないとし、paramsプラグインは、キーとして自分の名前と値の配列を返します。

例:

$allGetValues = $this->params()->fromQuery(); // empty method call 

array(
    'orderby' => 'birthdate', 
    'filter' => 'hasphone', 
); 

 

のような配列した場合のparamsプラグイン

を使用していないだろうhttp://example.com/?orderby=birthdate&filter=hasphone$ allGetValuesを訪問Paramsプラグインのsource codeをチェックすると、より一貫性のあるパラメーター取得を可能にするために、他のコントローラーを囲む単なるラッパーであることがわかります。なんらかの理由で直接アクセスする必要がある場合は、ソースコード内でどのように処理されているかを見ることができます。

例:

$this->getRequest()->getRequest('name', 'default'); 
$this->getEvent()->getRouteMatch()->getParam('name', 'default'); 

注:あなたはスーパーグローバル$ _GET、$ _POSTなどを使用することもできましたが、それは推奨されません。

+4

paramsプラグインを直接呼び出すことも可能です。これは、fromRoute()のショートカットです。 '$ this-> params( 'key'、 'default')' – Robin

+0

@Robin trueです。パラメータを指定しないで呼び出すとParamsプラグインが返され、ルートは返されないため、すべてのルートパラメータをフェッチすることはできません。 – Matsemann

+1

+1ユニットテストのコメント+リンク。いくつかの理由で単体テストをチェックすることはほとんどありません。 – Xunnamius

4

たとえば、投稿された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', 
       ), 
      ), 
     ), 

をし、私は角の$ http.postを使用してそれにデータをポストしたかったです。投稿はうまくいったが、Zendの検索方法は

$this->params()->fromPost('paramname'); 

はこの場合何も得られなかった。 「:// PHP」:

$content = file_get_contents('php://input'); 
print_r(json_decode($content)); 

私は最後に私のJSON配列を得たので、私の解決策は、$ _POSTから読み取るために、上記の他の方法のようなメソッドのすべての種類を試した後、でした。 これが役立つことを願っています。

+1

生のPOSTボディが必要な場合は、リクエストオブジェクトのgetContent()を使用してください。コントローラから、次のようにすることができます: '$ content = $ this-> getRequest() - > getContent()' –

+0

ZF2では '?name = mike'の形式でURLパラメータを取得する方法はありますか? – Stephane

1
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; 
関連する問題