2016-04-26 4 views
0

Ich bin mir nicht sicher, ob der Titel klar genug ist. Ich werde es besser erklären: Ich benutze 2 Bundles in meinem Projekt, MenuBundle und IntranetBundle.Erhalten Sie alle Informationen über eine db in einem anderen Bundle

MenuBundle ist hier, um die Navigation auf der linken Seite zu erstellen und das andere Bundle ist für die gesamte Website.

Mein Problem ist, dass ich überprüfen möchte, ob einer der Benutzer in der Datenbank (die Tabelle wird von der Entität, dem Controller usw. im IntranetBundle verwendet) Geburtstag hat und dann die Farbe eines ändert Element auf dem Navigationsteil.

Aber ich weiß nicht, wie man die Benutzer anruft und prüft, ob man Geburtstag hat (die Methode ist bereits im IntranetBundle angelegt, ich habe sie benutzt, wenn sie für andere Sachen benötigt wird, aber nur im IntranetBundle), ich weiß nur nicht, wie die Methode aufzurufen und überprüfen sie es in MenuBundle)

Hier ist der Anfang des Builder (das Ende ist für mein Problem nicht sinnvoll):

namespace Osaxis\MenuBundle\Menu; 

use Knp\Menu\FactoryInterface; 
use Symfony\Component\DependencyInjection\ContainerAware; 

class Builder extends ContainerAware 
{ 
public function mainMenu(FactoryInterface $factory, array $options) 
{ 
    $route = $this->container->get('request')->get('_route'); 
    $menu = $factory->createItem('root'); 

    $menu->addChild('Accès', array('route' => 'logout')); 
    $menu['Accès']->setAttribute('class', 'menuGcheLevel1'.($route == 'login' ? ' On' : '')); 

    // si l'utilisateur est authentifie (non anonyme) 
    $security = $this->container->get('security.context'); 
    if ($security->getToken() !== null && $security->isGranted('IS_AUTHENTICATED_FULLY')) { 

     /** @var \Osaxis\IntranetBundle\Entity\Users $user */ 
     $user = $security->getToken()->getUser(); 

     // Gestion des congés 
     if ($security->isGranted('ROLE_ADMIN')) { 
      $menu->addChild('Gestion des congés', array('route' => 'admin_conge')); 
      $menu['Gestion des congés']->setAttribute('class', 'menuGcheLevel1'.(fnmatch('admin_conge*', $route) ? ' On' : '')); 
     } else if (!$user->getUsrStagiaire() && $user->getUsrRol()->getRolCode() != 'ROLE_CONSULTATION') { 
      $menu->addChild('Gestion des congés', array('route' => 'conge')); 
      $menu['Gestion des congés']->setAttribute('class', 'menuGcheLevel1'.(fnmatch('conge*', $route) ? ' On' : '')); 
     } 

     // Gestion des jours fériés et Equipe Osaxis 
     if ($security->isGranted('ROLE_ADMIN')) { 
      $menu->addChild('Gestion des jours fériés', array('route' => 'jours_feries_index')); 
      $menu['Gestion des jours fériés']->setAttribute('class', 'menuGcheLevel1'.(fnmatch('jours_feries_*', $route) ? ' On' : '')); 

      $menu->addChild('Equipe Osaxis', array('route' => 'users_index')); 
      $menu['Equipe Osaxis']->setAttribute('class', 'menuGcheLevel1'.(fnmatch('users_*', $route)? ' On' : '')); 
      if (fnmatch('users_*', $route) && !fnmatch('users_changePwd', $route)) { 
       $menu->addChild('Gestion des utilisateurs', array('route' => 'users_index')); 
       $menu['Gestion des utilisateurs']->setAttribute('class', 'menuGcheLevel2'.(fnmatch('users_*', $route) && !fnmatch('users_trombi*', $route) && !fnmatch('users_reunions*', $route) ? ' On' : '')); 
       $menu->addChild('Trombinoscope', array('route' => 'users_trombi')); 
       $menu['Trombinoscope']->setAttribute('class', 'menuGcheLevel2'.(fnmatch('users_trombi*', $route) ? ' On' : '')); 
       $menu->addChild('Réunions délégués', array('route' => 'users_reunions')); 
       $menu['Réunions délégués']->setAttribute('class', 'menuGcheLevel2'.(fnmatch('users_reunions*', $route) ? ' On' : '')); 
      } 

     } 

     if($user->isBirthday()){ 
      echo "test"; 
     } 

die „if“ Am Ende testet man nur den angemeldeten Benutzer.

Ich möchte wissen, wenn einer der Benutzer heute Geburtstag hat.

Ich hoffe, ich habe alle notwendigen Details gegeben.

Vielen Dank im Voraus.

+0

Ich verstehe nicht, was Ihre Frage ist. Möchten Sie überprüfen, ob ein Benutzer heute Geburtstag hat? Was macht 'isBirthday()'? –

+0

Ja, das möchte ich machen, aber alles über die Benutzer ist in IntranetBundle. Und die Methode gibt nur wahr zurück, wenn der Benutzer, der die Methode aufruft, heute Geburtstag hat. isBirthday() funktioniert, ich benutze es im IntranetBundle, um Änderungen vorzunehmen, wenn jemand Geburtstag hat. Ich möchte nur Änderungen im anderen Bundle vornehmen.Aber ich weiß nicht, wie man es benutzt. –

+0

Was gibt die '$ user' Variable zurück? Wenn der aktuelle Benutzer zurückgegeben wird, was ist das Problem beim Aufruf von 'if ($ user-> isBirthday) '? Ich nehme an, 'isBirthday()' ist eine Methode in der Klasse '\ Osaxis \ IntranetBundle \ Entity \ Users'? –

Antwort

0

Ok. Ich habe einen anderen Weg gefunden, ohne merkwürdige Dinge mit Ausdruck zu tun. Hier ist sie:

$repo = $this->container->get('doctrine')->getRepository('IntranetBundle:Users'); 

     $users = $repo->findAll(); 

     for ($i=0; $i<sizeof($users); $i++){ 
      if($users[$i]->isBirthday()){ 
       echo 'un anniv '. $users[$i]; 
      } 
     } 

Damit ich bekommen kann, wie viele Menschen ihren Geburtstag haben und welche.

0

Dies ist eine schnelle Möglichkeit, alle Benutzer und Filter auf die Menschen zu bekommen, die ihren Geburtstag heute haben:

use Doctrine\Common\Collections\Criteria; 

$criteria = Criteria::create()->where(Criteria::expr()->like("birthdate", '%' . date('-m-d'))); 

$repo = $this->container->get('doctrine')->getRepository('IntranetBundle:User'); 
$users = $repo->findAll()->matching($criteria); 

Oder noch besser (und einfacher ist es, in Ihrer Anwendung überall zu verwenden), können Sie eine benutzerdefinierte hinzufügen Methode in Ihrer EntityRepository:

public function findUsersWithTheirBirthday(DateTime $date) 
{ 
    $qb = $this->getEntityManager()->createQueryBuilder(); 
    $qb->select('p'); 
    $qb->from($this->getEntityName(), 'p'); 

    $qb->where($qb->expr()->like("birthdate", '%' . $date->format('-m-d'))); 

    $q = $qb->getQuery(); 

    return $q->getResult(); 
} 

Sie Benutzer mit ihrem Geburtstag heute bekommen können, oder gestern, morgen, etc .:

$date = new DateTime(); 
$repo = $this->container->get('doctrine')->getRepository('IntranetBundle:User'); 
$users = $repo->findUsersWithTheirBirthday($date); 

$users gibt eine ArrayCollection zurück. Sie können überprüfen, ob es irgendwelche Leute haben ihren Geburtstag:

if ($users->count() > 0) { 
    echo 'we have a party today!' 

    foreach($users as $user) { 
     // .... 
    } 
} 

Oder nutzen map alle Namen zu erhalten:

$usersWithBirthday = $users->map(function() { 
    return $user->getUsername(); 
}; 

echo 'Today, these people have their birthday: '; 
echo implode(', ', $usersWithBirthday); 
+0

Hum ... Scheint wirklich gut. Aber es erkennt die "like" -Methode nicht:/Versuch, die Methode "like" in der Klasse "Doctrine \ Common \ Collections \ ExpressionBuilder" aufzurufen. –

+0

Ich aktualisierte meine Antwort. Ich habe die große 'endsWith' Methode vergessen. –

+0

Ich habe versucht mit "enthält" anstelle von "wie" und es bestanden. Aber jetzt bekomme ich: Versuch, die Methode "getRepository" in der Klasse "appDevDebugProjectContainer" aufzurufen. –