web-dev-qa-db-de.com

CakePHP erhält den Aktionsnamen

In CakePHP ist es möglich, die aufgerufene Funktionszeichenfolge mithilfe von zu erhalten

$this->action

syntax. Es gibt den Literal-String des Aufrufs zurück. Wenn die URL /do_this ist, wird do_this zurückgegeben. Wenn es sich um doThis handelt, wird doThis zurückgegeben. Unabhängig vom richtigen Namen der aufgerufenen Methode.

Was ich dagegen suche, ist der tatsächliche Name der aufgerufenen Methode, unabhängig von der URL-Syntax.

Gibt es eine Möglichkeit, das herauszufinden?

Ich könnte dies vorzugsweise in der beforeFilter-Methode tun.

11
arik

Sie sollten das Anforderungsobjekt verwenden.

CakePHP 3.3 und darunter

$this->request->params['action'];

Seit 3.4

$this->request->getParam('action');

Ich denke, das sollte den echten Methodennamen enthalten, der aufgerufen wurde. Der CakePHPs-Router löst die String-URL zu einem Controller/Action-Paar und anderen Argumenten auf, die im Request-Objekt enden. Lesen Sie die Dokumentation und machen Sie debug($this->request); in Ihrem beforeFilter (), um zu sehen, was sonst noch da ist.

19
burzum

In CakePHP 2 können Sie $ this-> action verwenden, in CakePHP 3 müssen Sie $ this-> request-> params ['action'] verwenden.

Das params-Array (CakePHP> = 3.4) ist veraltet. Der korrekte Weg zum Abrufen der aktuellen Aktion in einem Controller lautet:

$currentAction = $this->request->getParam('action');
3
thanassis

Hast du dir das mal angesehen? Abrufen des Namens der aktuellen Funktion in php Dies funktioniert offensichtlich nicht im beforeFilter. Sie können eine Variable festlegen: Private $ action_name im Controller und innerhalb der Methoden festlegen und anschließend in afterFilter verwenden 

0
visualex