98

zf2 でページ要求に関連するさまざまなパラメーターを取得するにはどうすればよいですか? post/get パラメーターと同様に、ルートへのアクセス、ヘッダーの送信、ファイルのアップロード。

4

5 に答える 5

206

これを行う最も簡単な方法は、ベータ 5 で導入された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の値は birthday になりますhttp://example.com/にアクセスすると、 $orderBy
のデフォルトnameになります。
 

すべてのパラメータを取得

1 つのタイプのすべてのパラメーターを取得するには、何も渡さないでください。Params プラグインは、名前をキーとして値の配列を返します。

例:

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

http://example.com/?orderby=birthdate&filter=hasphoneにアクセスすると、 $allGetValuesは次のような配列になります

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

 

Params プラグインを使用していない

Params プラグインのソース コードを確認すると、より一貫性のあるパラメーター取得を可能にするために、他のコントローラーの単なる薄いラッパーであることがわかります。何らかの理由でそれらに直接アクセスしたい/必要がある場合は、ソースコードでそれがどのように行われたかを確認できます。

例:

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

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

于 2012-08-22T16:05:25.380 に答える
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',
                ),
            ),
        ),

Angular の $http.post を使用してデータを投稿したかったのです。投稿は問題ありませんでしたが、Zend の取得方法

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

この場合は何も得られませんでした。したがって、私の解決策は、$_POST や上記の他の方法などのあらゆる種類の方法を試した後、「php://」から読み取ることでした。

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

最後にjson配列を取得しました。お役に立てれば。

于 2014-04-10T08:24:01.020 に答える
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;
于 2015-12-08T20:18:33.097 に答える