PHP Špecifické optimalizácia pre ak slučky v Symfony

0

Otázka

V Symfony app, musím použiť prepínač/prípad funkciu, ale žiadosť parametre zabraňuje mňa, a ja som použiť uggly ak stave ako :

        $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 pomôcť zjednodušiť ju ?

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

Najlepšiu odpoveď

1

Môžete vyskúšať nasledujúce.

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

Prečo I 'm pomocou ArrayObject triedy? Pretože to funguje ako výnos už. Na rozdiel od pole, objekt zaberá pamäť len pre aktuálny záznam keď iterated. Tak vašu slučku zaberá málo pamäte a nie načítať všetky vstupy do pamäte.

Dať všetky svoje platné úlohy do prvého poľa $definedRoles. Všetky úlohy budú iterated a ak podmienka bude kontrolovať, ak je to 's v $request objekt. Ak áno, úloha bude pripojené do $roles pole.

2021-11-23 21:36:26

Stačí byť vedomí, že $žiadosť->get je označený ako zavrhovaný v 5.4 a mali by sa už nepoužíva. symfony.com/blog/...
Cerad

V iných jazykoch

Táto stránka je v iných jazykoch

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