2017-09-19 1 views
0

Existe-t-il un moyen de vérifier si l'action d'un contrôleur est appelée?SilverStripe vérifie si l'action du contrôleur est appelée

private static $url_handlers = array(
    '$Foo!' => 'Bar' 
); 

// action 'Bar' is allowed ... 

public function Bar(SS_HTTPRequest $request) { 
    // method body 
} 

public function checkBar() { 
    // Check if Bar is called 
} 
+0

Ne pourriez-vous pas utiliser 'die ('Bar called');' dans cette action? si elle est exécutée, vous aurez un ** Bar ** appelé dans votre navigateur et le script arrêtera l'exécution. – teeyo

+0

Mais que se passe-t-il s'il veut effectuer d'autres appels après cela? Il ne pourra pas parce que le script aurait arrêté ... Iirc, vous aurez besoin d'un getter et setter pour un booléen que vous définissez à vrai dans votre barre de fonction que vous pouvez appeler à partir de checkBar – IsThisJavascript

+0

Correct, je ne veut pas que le code arrête d'être exécuté. Un setter/getter est une solution simple en effet. Pourtant, je veux savoir s'il y a une fonction intégrée dans le cadre. – Faloude

Répondre

1

En aparté à WillParky93's answer, qui travaillera à l'action répétée fait appel à une seule instance de contrôleur, vous pouvez également utiliser Controller::getAction() pour vérifier que l'action est en cours d'exécution dans la demande actuelle:

if ($this->getAction() === 'Bar') { 
    // foo something 
} 

Ou si vous attendez que plusieurs instances de votre contrôleur soient appelées plusieurs fois dans la même requête, vous pouvez faire ce que WillParky93 a suggéré, mais utilisez plutôt une propriété statique pour que l'état persiste sur différentes instances.

+0

Donc il y a une action intégrée après tout – Faloude

+0

Bon alors ce qui est paradoxal à propos de ça, c'est qu'il retourne toujours 'NULL' quand on l'appelle dans la méthode' Init' du contrôleur. Lorsqu'il est appelé dans la méthode du contrôleur "actif", cela fonctionne et indique l'évidence. – Faloude

1

Comme je l'ai dit dans les commentaires, vous pouvez utiliser un getter et un setter avec une variable booléenne et vérifier par rapport à cela.

private static $url_handlers = array(
'$Foo!' => 'Bar' 
); 

// action 'Bar' is allowed ... 

private $barCalled = false; 

public function setBar($value){ 
    $this->barCalled = $value; 
} 

public function Bar(SS_HTTPRequest $request) { 
    if(!$this->barCalled){ 
     // method body 
     $this->setBar(true); 
    } 
} 


public function checkBar() { 
    // Check if Bar is called 
    return $this->barCalled; 
}