在 Symfony 應用程式中,我需要使用 switch/case 函式,但請求引數阻止了我,我使用了一個丑陋的 if 條件,例如:
$roles = ["ROLE_USER"];
if ($request->get('isAdmin')) {
array_push($roles, "ROLE_ADMIN");
}
if ($request->get('isFreemium')) {
array_push($roles, "ROLE_FREEMIUM");
}
if ($request->get('isPremium')) {
array_push($roles, "ROLE_PREMIUM");
}
if ($request->get('isExternal')) {
array_push($roles, "ROLE_EXTERNAL");
}
if ($request->get('isVip')) {
array_push($roles, "ROLE_VIP");
}
你能幫我簡化一下嗎?
uj5u.com熱心網友回復:
您可以嘗試以下操作。
$definedRoles = new ArrayObject([
'Admin',
'Freemium',
'Premium',
'External',
'Vip',
]);
$roles = new ArrayObject([ 'ROLE_USER' ]);
foreach ($definedRoles as $role) {
if ($request->get('is' . $role)) {
$roles->append(strtoupper('role_' . $role));
}
}
為什么我要使用這個ArrayObject類?因為它已經像產量一樣作業了。與陣列不同,物件在迭代時只為當前條目占用記憶體。因此,您的回圈占用的記憶體很少,并且您不會將所有條目加載到記憶體中。
將所有有效角色放入第一個陣列中$definedRoles。將迭代所有角色,并檢查 if 條件是否在$request物件中。如果是這樣,角色將被附加到$roles陣列中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/364739.html
