Создать имя экземпляра объекта динамически - PullRequest
0 голосов
/ 11 сентября 2018

У меня есть массив недель, который динамически создается в другом месте (вот дамп print_r):

  array:28 [▼
  “week1” => “2018-03-01”
  “week2” => “2018-03-08”
  “week3” => “2018-03-15”
  “week4” => “2018-03-22”
  “week5” => “2018-03-29”
  “week6” => “2018-04-05”
  “week7” => “2018-04-12”
  “week8” => “2018-04-19”
  “week9” => “2018-04-26”
  “week10” => “2018-05-03”
  “week11” => “2018-05-10”
  “week12” => “2018-05-17”
  “week13” => “2018-05-24”
  “week14” => “2018-05-31”
  “week15” => “2018-06-07”
  “week16” => “2018-06-14”
  “week17” => “2018-06-21”
  “week18” => “2018-06-28”
  “week19” => “2018-07-05”
  “week20” => “2018-07-12”
  “week21” => “2018-07-19”
  “week22” => “2018-07-26”
  “week23” => “2018-08-02”
  “week24” => “2018-08-09”
  “week25” => “2018-08-16”
  “week26” => “2018-08-23”
  “week27” => “2018-08-30”
  “week28” => “2018-09-06”
]

Для каждой из этих недель я хотел бы создать экземпляр объекта Google_Service_AnalyticsReporting_DateRange, чтобы я могможет запрашивать несколько диапазонов дат в одном и том же пакетном вызове.

Однако в соответствии с API отчетов Google Analytics V4 мне нужно создавать экземпляры с разными именами:

Образцы |API отчетов Analytics v4 |Разработчики Google

В частности:

$march = new Google_Service_AnalyticsReporting_DateRange();
$march->setStartDate(“2015-03-01”);
$march->setEndDate(“2015-03-31”);

$January = new Google_Service_AnalyticsReporting_DateRange();
$January->setStartDate(“2015-01-01”);
$January->setEndDate(“2015-01-31”);

Моя проблема заключается в том, что я не могу понять, возможно ли выполнить цикл по массиву недель для динамического создания нескольких экземпляров (с разными именами),Вот мой метод:

private function get_timeline_report($analytics, $campaign_start_date, $dates, $expression=null, $alias=null, $filter=null, User $user)
{
    $dates = (array_values($dates));

    foreach ($dates as $key => $value)
    {
        // todo - need to get date and give it a name (week1 etc - see http://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.newx)
        // Create the DateRange object.
        $date_ranges[$key] = new Google_Service_AnalyticsReporting_DateRange();
        $date_ranges[$key]->setStartDate($campaign_start_date);
        $date_ranges[$key]->setEndDate($value);
    }

    // Create the Metrics object.
    $sessions = new Google_Service_AnalyticsReporting_Metric();
    $sessions->setExpression($expression);
    $sessions->setAlias($alias);

    // Create the ReportRequest object.
    $request = new Google_Service_AnalyticsReporting_ReportRequest();
    $request->setViewId($user->ga_view_id);
    $request->setDateRanges($date_ranges);
    $request->setMetrics($sessions);
    $request->setFiltersExpression($filter);

    $body = new Google_Service_AnalyticsReporting_GetReportsRequest();
    $body->setReportRequests(array($request));

    return $analytics->reports->batchGet($body);
}

Можно ли динамически создавать имена экземпляров, и если да, то как?Текущий код возвращает это исключение службы Google:

(1/1) Google_Service_Exception
{
"error": {
"code": 400,
"message": "Invalid JSON payload received. Unknown name \"week1\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week2\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week3\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week4\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week5\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week6\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week7\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week8\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week9\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week10\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week11\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week12\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week13\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week14\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week15\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week16\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week17\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week18\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week19\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week20\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week21\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week22\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week23\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week24\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week25\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week26\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week27\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week28\" at 'report_requests[0].date_ranges[0]': Cannot find field.",
"errors": [
{
"message": "Invalid JSON payload received. Unknown name \"week1\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week2\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week3\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week4\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week5\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week6\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week7\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week8\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week9\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week10\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week11\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week12\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week13\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week14\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week15\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week16\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week17\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week18\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week19\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week20\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week21\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week22\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week23\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week24\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week25\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week26\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week27\" at 'report_requests[0].date_ranges[0]': Cannot find field.\nInvalid JSON payload received. Unknown name \"week28\" at 'report_requests[0].date_ranges[0]': Cannot find field.",
"domain": "global",
"reason": "badRequest"
}
],
"status": "INVALID_ARGUMENT"
}
}

1 Ответ

0 голосов
/ 11 сентября 2018

Вы задали неверный вопрос, поскольку ваша ошибка на самом деле не связана с именем экземпляра вашего объекта. В примере Google на нескольких датах мы можем заметить:

 $request->setDateRanges(array($march, $january));

Как видите, этот массив вовсе не ассоциативный. Итак, мы можем заключить, что Google Api не использует имена всех ваших экземпляров, а только сами экземпляры dateRange. Так что ваш первый код может работать нормально, если вместо :

foreach ($dates as $key => $value)
    {
        // Create the DateRange object.
        $date_ranges[$key] = new Google_Service_AnalyticsReporting_DateRange();
        $date_ranges[$key]->setStartDate($campaign_start_date);
        $date_ranges[$key]->setEndDate($value);
    }

вы используете что-то вроде:

$i=0;
foreach ($dates as $key => $value)
{
    // Create the DateRange object.
    $date_ranges[$i] = new Google_Service_AnalyticsReporting_DateRange();
    $date_ranges[$i]->setStartDate($campaign_start_date);
    $date_ranges[$i]->setEndDate($value);
    $i++;
}
unset($i,$key,$value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...