PHP otimização Específica para se loop no Symfony

0

Pergunta

No Symfony app, eu preciso usar o switch/case função, mas os parâmetros de uma requisição me impede, e eu uso um uggly condição se como :

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

Você pode me ajudar a simplificar a ti ?

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

Melhor resposta

1

Você pode tentar o seguinte.

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

Por isso que eu 'm usando o ArrayObject classe? Porque ele funciona como um rendimento já. Ao contrário de uma matriz, o objeto ocupa apenas a memória para a entrada atual quando iterada. Assim, o seu ciclo ocupa pouca memória e não carregar todas as entradas na memória.

Coloque todos os seus válido funções em primeira matriz $definedRoles. Todas as funções será iterada e uma condição se verifica, se ele 's no $request objecto. Se assim for, o papel será anexado ao $roles matriz.

2021-11-23 21:36:26

Apenas esteja ciente de que o $request->get é preterido em 5.4 e não deve mais ser usado. symfony.com/blog/...
Cerad

Em outros idiomas

Esta página está em outros idiomas

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