2016-10-12 2 views
1

Ich benutze einen Voter, um festzustellen, ob der angemeldete Benutzer ein bestimmtes Objekt bearbeiten kann. Eines der Kriterien erfordert einen Vergleich mit einem anderen Objekt, aber ich bin mir nicht sicher, wie ich dies an den Wähler weitergeben soll. Ich kann die Konstruktorargumente nicht verwenden, da es sich nicht um einen vordefinierten Wert handelt.Symfony2: Übergeben Sie ein zweites Objekt an einen Voter

Grundsätzlich würde Ich mag so etwas tun:

protected function voteOnAttribute($attribute, $subject, TokenInterface $token, $comparedObject) 
      { if ($subject->getProperty1 == $comparedObject) 
    {return true;} 
    } 

Jede Hilfe würde geschätzt.

Antwort

0

Mein Vorschlag ist es, zusätzliche Eigenschaft von "Betreff" zu erstellen, wo Sie "verglichenes Objekt" setzen können.

// Inside action. 
public function myBestAction(Request $request) 
{ 
    // My super code... e.g. we have received from ORM a $post. 

    // Create property on the fly to put $comparedObject. 
    // Perhaps creating property dynamically is not good practice, therefore you can create permanent with getter and setter. 
    $post->comparedObject = $comparedObject; 
    $this->isGranted('can_edit', $post); 
} 

// Now inside voter. 
private function canEdit($subject) 
{ 
    $comparedObject = $subject->comparedObject; 

    // Compare $subject(post) with $comparedObject and return true or false... 
} 
Verwandte Themen