Slim php framework, меняйте ключи многомерных - PullRequest
0 голосов
/ 25 октября 2018

У меня есть 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

, что я сделал в контроллере, это

//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);

Когда я использую 2-й URL-адрес, результат, который я ожидал, но когдаЯ использую 1-й URL-адрес, ключи изменились, но значения были пустыми.

Я сомневаюсь, что наложен псевдоним с одноразмерным псевдонимом.

ниже является частью класса IjazahTransformer

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)

Что я хочу использовать первый URL, но он указан со значением, а не с пустым значением

1 Ответ

0 голосов
/ 25 октября 2018

Я думаю, что метод 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"
}
...