2017-05-19 6 views
0

1人のユーザーに複数のロールを追加したい。しかし、私は次のエラーgettngています:1人のユーザーに複数のロールを追加するとUncaught Zend View Exception InvalidArgumentExceptionが発生する

Fatal error: Uncaught Zend\View\Exception\InvalidArgumentException: $role must be a string, null, or an instance of Zend\Permissions\Role\RoleInterface; array given in C:\xampp\htdocs\newtt\vendor\zendframework\zend-view\src\Helper\Navigation\AbstractHelper.php:704. 

コード:

public function getViewHelperConfig() 
{ 

    return array(
     'factories' => array(
      // This will overwrite the native navigation helper 
      'navigation' => function(HelperPluginManager $pm) { 
       $sm = $pm->getServiceLocator(); 
       $config = $sm->get('Config'); 
       $Adapter = $sm->get('Model\Adabter'); 
       $table = new \Models\Exnewtt\ExProfilfonctionnaliteTable($Adapter); 
       $acl = new \Navigation\Acl\Acl($config); 


       // Get the AuthenticationService 
       $auth = $sm->get('Zend\Authentication\AuthenticationService'); 
       $role = \Navigation\Acl\Acl::DEFAULT_ROLE; // The default role is login $acl 

       if ($auth->hasIdentity()) { 
        $user = $auth->getIdentity(); 
        $usrlId = $user->id_profil; 
        $authorization = $table->getProfilfonctionnalite2($usrlId); 
        $navigation = $pm->get('Zend\View\Helper\Navigation'); 
        $roles = array(); 
        $a = array(); 
        foreach ($authorization as $autho) : 
         // TODO we don't need that if the names of the roles are comming from the DB 
          $a[$autho->id_fonctionnalite]= $autho->id_fonctionnalite; 

         if($autho->id_fonctionnalite == 0) { 
          $role = \Navigation\Acl\Acl::DEFAULT_ROLE; // login 
          $roles[$autho->id_fonctionnalite] ='login'; 
         } 
         else if($autho->id_fonctionnalite == 1) { 
           $role = 'non'; 
           // Store ACL and role in the proxy helper: 
           $roles[$autho->id_fonctionnalite] ='non'; 
         } else if($autho->id_fonctionnalite == 2) { 
          $role = 'agent'; 
          $roles[$autho->id_fonctionnalite] ='agent'; 
         } else if($autho->id_fonctionnalite == 3) { 
          $role = 'admin' ; 

          $roles[$autho->id_fonctionnalite] ='admin'; 
          } 
         else if($autho->id_fonctionnalite == 4) { 
          $role = 'article' ; 
          $roles[$autho->id_fonctionnalite] = 'article'; 
         } 
         else if($autho->id_fonctionnalite == 5) { 
          $role = 'comptecomptable'; 
          $roles[$autho->id_fonctionnalite] ='comptecomptable'; 
         } else if($autho->id_fonctionnalite == 6) { 

          $roles[$autho->id_fonctionnalite] ='espacett'; 
          } 
          else if($autho->id_fonctionnalite == 7) { 
           $roles[$autho->id_fonctionnalite] = 'profil'; 
          } 
          else if($autho->id_fonctionnalite == 8) { 
            $role = 'remise'; 
           $roles[$autho->id_fonctionnalite] = 'remise'; 
          } 
         else if($autho->id_fonctionnalite == 9) { 
            $role = 'tracage'; 

          $roles[$autho->id_fonctionnalite] ='tracage'; 
         } 

          else if($autho->id_fonctionnalite == 10) { 
            $role = 'taxe'; 

           $roles[$autho->id_fonctionnalite] = 'taxe'; 
          } 
          else if($autho->id_fonctionnalite == 11) { 
           $role = 'utilisateur'; 


           $roles[$autho->id_fonctionnalite] ='utilisateur'; 

          } 
           else { 
            $role =\Navigation\Acl\Acl::DEFAULT_ROLE;; // login 
            $roles[$autho->id_fonctionnalite] = 'login'; 
           } 

         endforeach; 


        } 
        // Return the new navigation helper instance 
         $navigation->setAcl($acl)->setRole($roles); 

         return($navigation) ;  

       } 
      ) 
     ); 
    } 

答えて

0

をあなたは、ナビゲーションのために、一度に複数の役割を持つことはできません。 (コレクションではなく)一意の認可を取得し、if条件では降順に並べる必要があります。複数の役割を持つユーザーが最初に最も許容度の高いものを返すようにします。

$usrlIdの値が一意でない場合は、基本的なモデリングの問題があります。

// Note that the $table method name is altered to imply it doesn't return a collection. 
// You'll need to either make a new method, or pull it out of the collection here. 
$authorization = $table->getOneProfilfonctionnalite2($usrlId); 

if($authorization->id_fonctionnalite == 0) { 
    $role = \Navigation\Acl\Acl::DEFAULT_ROLE; // login 
    return $navigation->setAcl($acl)->setRole('login'); 
} else if($authorization->id_fonctionnalite == 1) { 
    $role = 'non'; 
    return $navigation->setAcl($acl)->setRole('non'); 
} else if($authorization->id_fonctionnalite == 2) { 
    // snip 
関連する問題