Slim php 框架,多维度的变化键

Slim php framework, change keys of multidimensional

我有 2 个 url 的例子,如下所示

http://localhost:8000/ijazah?filter[id_prodi][<exact>]=1010102&filter[angkatan][<exact>]=2014

http://localhost:8000/ijazah?filter[id_prodi]=1010102&filter[angkatan]=2014

我在Controller中所做的是

//get parameter
$query = $this->request->getQueryParams();
//validate parameter
$filter = is_array($query['filter']) ? $query['filter'] : [];
//change keys
$filter = $this->transformer->changeKeys($filter, IjazahTransformer::$alias);
//testing
vardump($filter);

当我使用第二个 url 时,结果是我所期望的 但是当我使用第一个 url 时,键发生了变化,但值是空的。

我怀疑我使用的是单维别名。

下面是 IjazahTransformer 的一部分 Class

class IjazahTransformer extends TransformerAbstract
{
    public static $alias = [
        'angkatan' => 'ANGKATAN',
        'id_prodi' => 'IDPRODI',
    ];
}

及以下是url

的结果

Result First URL

array (size=2)
  'IDPRODI' => 
    array (size=0)
      empty
  'ANGKATAN' => 
    array (size=0)
      empty

Result Second URL

array (size=2)
  'IDPRODI' => string '1010102' (length=7)
  'ANGKATAN' => string '2014' (length=4)

What I want to use the first url but it is listed with its value not with empty value

我认为 changeKeys 方法不 运行 您的预期。如果您可以更改 TransformerAbstract,或者您可以像下面那样进行更改。或者你可以覆盖 IjazahTransformer

public function changeKeys($filter, $alias)
{
    foreach ($filter as $key=>$v) {
        $newFilter[$alias[$key]] = array_values($v)[0];
    }
    return $newFilter;
}

结果:

array(2) {
  ["IDPRODI"]=> string(7) "1010102"
  ["ANGKATAN"]=> string(4) "2014"
}