为什么我的 if 语句在 Laravel 中无法正常工作?

问题描述 投票:0回答:1

首先,我进行 API 调用以返回域中的所有电子邮件。我不会费心发布 API 调用,因为它是有效的。但这就是我对回复所做的事情:

    $resJson = json_decode($response, TRUE);

    $exclusions = DB::table('exclusion')->get();
    foreach($exclusions as $exclusion) {
      $exc[]=$exclusion->email;
    }

我对其进行 json 解码,然后从数据库导入排除的电子邮件列表,在下面的第一个 if 语句中,我将其与我不想显示的电子邮件的排除数组进行检查。 然后我回应以下内容。

<div class="table-responsive"> <table class="table"> <thead class="text-primary"> <th><strong>Users</strong></th><th><strong>Creation Date</strong></th><th><strong>Last Login</strong></th><th><strong>Status</strong></th><th><strong>Suspension Reason</strong></th><th style="text-align: center;"><strong>Action</strong></th> </thead> <tbody> @php foreach($resJson["users"] as $user) { if(!in_array($user['primaryEmail'], $exc)) { if($user['suspended'] == false) { $susEnable = '<form name="suspend" style="text-align: center;" action="/customer/apps/gsuite/suspend" method="POST"><input type="hidden" name="_token" value="'.csrf_token().'"/><input type="hidden" name="email" value="'.$user['primaryEmail'].'"/><button class="btn btn-danger">Suspend Account</button></form>'; $status = 'Active'; $reason = ''; } elseif($user['suspended'] == true) { $susEnable = '<form name="enable" style="text-align: center;" action="/customer/apps/gsuite/restore" method="POST"><input type="hidden" name="_token" value="'.csrf_token().'"/><input type="hidden" name="email2" value="'.$user['primaryEmail'].'"/><button class="btn btn-fill btn-success">Restore Account</button></form>'; $status = 'Suspended'; $reason = $user['suspensionReason']; } if($user['lastLoginTime']=="1970-01-01T00:00:00.000Z") { $lastLogin = 'Never'; } else { $lastLogin = str_replace('T',' // ', $user['lastLoginTime']); $lastLogin = str_replace('Z','', $lastLogin); } $creationTime = str_replace('T',' // ', $user['creationTime']); $creationTime = str_replace('Z','', $creationTime); echo '<tr><td style="line-height: 5; color: white;">' . $user['primaryEmail'] . '</td><td style="line-height: 5; color: white;">' . $creationTime . '</td><td style="line-height: 5; color: white;">' . $lastLogin . '</td><td style="color: white;">'.$status.'</td><td style="color: white;">'.$reason.'</td><td>'.$susEnable.'</td></tr>'; } } @endphp </tbody> </table> </div>

上面的代码是从 Google ADMIN SDK JSON 响应中提取的。示例 JSON 响应如下所示:

{ "kind":"admin#directory#user", "id":"115906813143010867543", "etag":"", "primaryEmail":"[email protected]", "name":{ "givenName":"amr", "familyName":"h", "fullName":"amr h" }, "isAdmin":false, "isDelegatedAdmin":false, "lastLoginTime":"1970-01-01T00:00:00.000Z", "creationTime":"2021-01-11T20:46:25.000Z", "agreedToTerms":false, "suspended":true, "suspensionReason":"ADMIN", "archived":false, "changePasswordAtNextLogin":true, "ipWhitelisted":false, "emails":[ { "address":"[email protected]", "primary":true }, { "address":"[email protected]" } ], "nonEditableAliases":[ "[email protected]" ], "customerId":"C04357r1m", "orgUnitPath":"/", "isMailboxSetup":true, "includeInGlobalAddressList":true, "recoveryEmail":"" }

问题是,
有时

if 语句会起作用并输出正确的形式,但有时会失败。我看到,当正确的按钮确实出现时,它会完全按照我的控制器执行预期的操作,因此我不会费心在此处发布代码,因为它只是一个 API 调用。 让我们举一个电子邮件示例:

[电子邮件受保护]

我在 JSON 响应中看到该电子邮件已被暂停。因此,根据代码中的 if 语句,它应该显示“SUSPENDED”以及暂停原因,以及显示“Restore Account”的 btn-success。然而,它显示的内容与 HTML 中的完全相反。我以为这可能是缓存问题,但事实并非如此。有什么想法吗?

php laravel google-api google-admin-sdk
1个回答
0
投票

暂停/恢复是具有不同参数的相同 API 调用,而在域中拉取用户数据实际上是另一个 API 调用。虽然 API 中的挂起和恢复功能是即时的,但第二个 API 需要一两分钟才能真正更新用户的状态。

删除 Laravel/PHP 标签并向此问题添加 Google 标签,以防其他人遇到类似问题。

© www.soinside.com 2019 - 2024. All rights reserved.