1

Magentoでは、いつものようにparamを取得していました

http://magento.com/customer/account/view/id/122

次の方法でパラメータを取得できます

$x = $this->getRequest()->getParam('id');
echo $x; // value is 122

今私が知っている限り、パラメータから文字列を取得するためだけに$xを知っています。

$ xを配列として取得する方法はありますか?

例として:

Array
(
    [0] => 122
    [1] => 233
)
4

6 に答える 6

5

例えば:

http://magento.com/customer/account/view/id/122-233

$x = $this->getRequest()->getParam('id');
$arrayQuery = array_map('intval', explode('-', $x)));
var_dump($arrayQuery);
于 2013-03-16T02:24:34.787 に答える
3

現在、ZendFrameworkまたはMagentoが配列パラメータをzendurlに渡すことはできません。

get変数を配列として渡すことで報告されたバグを次に示します。

于 2013-03-16T02:37:42.437 に答える
3

すべてのパラメーターを配列として取得する場合 (可変オブジェクトである可能性があります):

$params = $this->getRequest()->getParams();
于 2013-03-16T02:26:56.940 に答える
2

訪問者からの入力を配列として必要な場合は、URLでGET paramsとして渡すのではなく、POST変数として渡すことをお勧めします。

次に、$ _ POSTにすべてが含まれ、$ params = $ this-> getRequest()-> getParams();が可能になります。

于 2013-03-16T04:36:42.817 に答える
1

Zend Framework 1.12 では、メソッド getParam() だけでこれが可能です。getParam() の結果は、使用可能な key がない場合は NULL 、1 つの keyの場合は文字列、複数の keys の場合は配列であることに注意してください。

「id」値がありません

http://domain.com/module/controller/action/

$id = $this->getRequest()->getParam('id');
// NULL

単一の「id」値

http://domain.com/module/controller/action/id/122

$id = $this->getRequest()->getParam('id');
// string(3) "122"

複数の「id」値:

http://domain.com/module/controller/action/id/122/id/2584

$id = $this->getRequest()->getParam('id');
// array(2) { [0]=> string(3) "122" [1]=> string(4) "2584" }

これは、コードに常に文字列が必要で、何らかの理由でより多くの値が URL に設定されている場合に問題になる可能性があります。たとえば、「配列から文字列への変換」というエラーが発生する場合があります。getParam() から必要なタイプの結果を常に取得できるように、このようなエラーを回避するためのいくつかのトリックを次に示します。

$id を配列にしたい場合(param が設定されていない場合は NULL)

$id = $this->getRequest()->getParam('id');
if($id !== null && !is_array($id)) {
    $id = array($id);
}

http://domain.com/module/controller/action/
// NULL

http://domain.com/module/controller/action/id/122
// array(1) { [0]=> string(3) "122" }

$id を常に配列にしたい場合(設定されていない場合は NULL 値はなく、空の配列のみ):

$id = $this->getRequest()->getParam('id');
if(!is_array($id)) {
    if($id === null) {
        $id = array();
    } else {
        $id = array($id);
    }
}

http://domain.com/module/controller/action/
// array(0) { }

http://domain.com/module/controller/action/id/122
// array(1) { [0]=> string(3) "122" }

上記と同じ 1 行 (NULL なし、常に配列):

$id = (array)$this->getRequest()->getParam('id');

$id を文字列にしたい場合(最初に利用可能な値、NULL をそのまま保持)

$id = $this->getRequest()->getParam('id');
if(is_array($id)) {
    $id = array_shift(array_values($id));
}

http://domain.com/module/controller/action/
// NULL

http://domain.com/module/controller/action/122/id/2584
// string(3) "122"

$id を文字列にしたい場合(最後の利用可能な値、NULL をそのまま保持します)

$id = $this->getRequest()->getParam('id');
if(is_array($id)) {
    $id = array_pop(array_values($id));
}

http://domain.com/module/controller/action/
// NULL

http://domain.com/module/controller/action/122/id/2584/id/52863
// string(5) "52863"

getParam のこれらの「応答タイプ」を修正するためのより短い/より良い方法があるかもしれませんが、上記のスクリプトを使用する場合は、別のメソッド (拡張ヘルパーなど) を作成する方がクリーンになる可能性があります。

于 2015-06-05T10:31:55.113 に答える