2014-07-07 7 views
11

In CakePHP ist es möglich, die genannte Funktion Zeichenfolge mit derCakePHP erhält Namen Aktion

$this->action 

Syntax zu erhalten. Es gibt die Literalzeichenfolge des aufgerufenen Objekts zurück. Wenn die URL /do_this lautet, wird do_this zurückgegeben, und wenn es doThis ist, wird doThis zurückgegeben. Unabhängig vom tatsächlichen Namen der aufgerufenen Methode.

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

Gibt es eine Möglichkeit, es herauszufinden?

Ich würde dies vorzugsweise in der beforeFilter Methode tun können.

+0

Es ist die Struktur der sauberen URL von CakePHP, dass, was auch immer Sie in URL schreiben, dass Aktion aufgerufen wird. zum Beispiel wird www.domain.com/x/y y Aktion in x-Controller aufrufen. Dies ist in Ihrer .htaccess-Datei definiert. –

+0

Es würde helfen, wenn Sie das eigentliche Problem erklären würden, das Sie zu lösen versuchen, dh warum genau benötigen Sie den genauen Methodennamen? ps. Bitte geben Sie immer Ihre genaue CakePHP-Version an und markieren Sie Ihre Frage entsprechend! – ndm

+0

Vielleicht könnten Sie die Aktion bekommen und dann 'if (method_exists ('doThis'))' für jeden möglichen Fall tun. Aber stimme mit ndm überein, wenn du deine Absicht erklärst, könnte es einen besseren Weg geben. (siehe auch 'function_exists') – Ross

Antwort

0

Haben Sie sich das mal angesehen? Retrieving the name of the current function in php Dies wird natürlich nicht im beforeFilter funktionieren. Sie können eine Variable setzen: private $ action_name im Controller und setzen Sie es aus den Methoden heraus und verwenden Sie es danach, in afterFilter

+0

Leider ist das für mich zu spät. Es tut uns leid. – arik

+0

Das ist zu spät in der Laufzeit. Ich muss die Funktion kennen, die gerade in der Funktion vorFilter aufgerufen wird. – arik

18

Sie sollten das Anfrageobjekt verwenden.

CakePHP 3.3 und unter

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

Seit 3,4

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

ich denke, das die realen Methodennamen enthalten soll, die aufgerufen wurde. Der CakePHPs-Router löst die Zeichenfolge-URL in ein Controller/Aktion-Paar und andere Argumente auf, die alle im Anforderungsobjekt landen. Lesen Sie die Dokumentation und machen Sie debug($this->request); in Ihrem beforeFilter(), um zu sehen, was es sonst noch gibt.

+1

Leider gibt es auch die Zeichenfolge zurück, die in der Abfrage verwendet wurde, und nicht den tatsächlichen Namen der Funktion. – arik

4

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

+1

können Sie Verweise auf die Dokumentation angeben, wo dies erwähnt wird? und ein Beispiel, wenn möglich. – Mohit

3

Die params Array (CakePHP> = 3.4) ist veraltet Der richtige Weg, um die aktuelle Aktion innerhalb eines Controllers zu erhalten ist:

$currentAction = $this->request->getParam('action'); 
+0

Arbeitete perfekt für mich. –