PHP Specifice de optimizare pentru cazul în buclă în Symfony

0

Problema

În Symfony app, am nevoie pentru a utiliza switch/case funcție, dar parametrii de cerere previne mine, si eu folosesc un uggly dacă condiția ca :

        $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");
        }

Mă puteți ajuta să-l simplifice ?

if-statement loops php switch-statement
2021-11-23 21:07:21
1

Cel mai bun răspuns

1

Puteți încerca următoarele.

$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));
    }
}

De ce eu sunt, folosind ArrayObject clasa? Pentru că funcționează ca un randament deja. Spre deosebire de un tablou, obiect ocupă memorie numai pentru curent de intrare atunci când se repetă. Astfel, bucla ocupă puțină memorie și nu încărcați toate intrările în memorie.

Pune toate valabile roluri în prima matrice $definedRoles. Toate rolurile vor fi reiterate și o condiție în cazul în care va verifica, în cazul modelului în $request obiect. Dacă este așa, rolul va fi anexată la $roles matrice.

2021-11-23 21:36:26

Doar să fie conștienți de faptul că $cerere->ia este depreciată în 5.4 și ar trebui să nu mai fie folosit. symfony.com/blog/...
Cerad

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................