PHP Specifické optimalizace pro, pokud se smyčka v Symfony

0

Otázka

V Symfony aplikace, musím použít switch/case funkce, ale parametry požadavku brání mě, a já jsem použít uggly, pokud podmínka, jako je :

        $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ůžete mi pomoci zjednodušit ?

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

Nejlepší odpověď

1

Můžete zkusit následující.

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

Důvod, proč jsem 'm pomocí ArrayObject třída? Protože to funguje jako výnos již. Na rozdíl od pole, objekt zabírá paměť pouze pro aktuální vstup, když opakoval. Tak vaše smyčky zabírá málo paměti, a nemusíte načíst všechny položky do paměti.

Dát všechny své platný role do prvního pole $definedRoles. Všechny role bude opakována a pokud stav bude kontrolovat, pokud je to v $request objekt. Pokud ano, roli bude připojen k $roles pole.

2021-11-23 21:36:26

Jen být vědomi toho, že $request->get je zastaralý v 5.4 a měl by již být použit. symfony.com/blog/...
Cerad

V jiných jazycích

Tato stránka je v jiných jazycích

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