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"
}
我有 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"
}