2014-07-07 7 views
11

In CakePHP, è possibile ottenere la chiamata stringa di funzione utilizzando la sintassiCakePHP ottengono nome dell'azione

$this->action 

. Restituisce la stringa letterale di ciò che viene chiamato, quindi se l'URL è /do_this, restituisce do_this e se è doThis restituirà doThis. Indipendentemente dal nome reale del metodo chiamato.

Quello che sto cercando, d'altra parte, è il nome effettivo del metodo chiamato, indipendentemente dalla sintassi dell'URL.

C'è un modo per scoprirlo?

Preferibilmente sarei in grado di farlo nel metodo beforeFilter.

+0

È la struttura dell'URL pulito di cakephp che qualsiasi cosa si scriva in quell'URL viene chiamata. per esempio www.domain.com/x/y chiamerà y action in x controller. Questo è definito nel tuo file .htaccess. –

+0

Sarebbe di grande aiuto se spiegassi il problema reale che stai cercando di risolvere, ovvero perché esattamente hai bisogno del nome esatto del metodo? ps. per favore menziona sempre la tua versione CakePHP esatta e tagga la tua domanda di conseguenza! – ndm

+0

Forse potresti ottenere l'azione e poi fare 'if (method_exists ('doThis'))' per ogni caso possibile. Ma d'accordo con ndm, se chiarisci la tua intenzione potrebbe esserci un modo migliore. (vedi anche 'function_exists') – Ross

risposta

0

Hai dato un'occhiata a questo? Retrieving the name of the current function in php Questo ovviamente non funzionerà nel precedente filtro. È possibile impostare una variabile: private $ action_name nel controller e impostarlo dai metodi e utilizzarlo in seguito, in afterFilter

+0

Sfortunatamente, è troppo tardi per me. Scusate. – arik

+0

Questo è troppo tardi nel runtime. Ho bisogno di conoscere la funzione che sta per essere chiamata già nella funzione beforeFilter. – arik

18

È necessario utilizzare l'oggetto richiesta.

CakePHP 3.3 e al di sotto

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

Dal 3,4

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

Penso che questo dovrebbe contenere il nome del metodo vero e proprio che è stato chiamato. Il router CakePHPs risolve l'URL della stringa con una coppia di controller/azioni e altri argomenti, tutto ciò finisce nell'oggetto richiesta. Leggi la documentazione e fai debug($this->request); nel tuo beforeFilter() per vedere cos'altro c'è.

+1

Sfortunatamente, restituisce anche la stringa utilizzata nella query e non il nome effettivo della funzione. – arik

4

In CakePHP 2 è possibile utilizzare $ this-> azione, in CakePHP 3 è necessario utilizzare $ this-> request-> params [ 'action']

+1

puoi fornire riferimenti ad alcuni documenti, dove questo è menzionato? e un esempio se possibile. – Mohit

3

Il params array (CakePHP> = 3.4) è deprecato Il modo corretto per ottenere l'azione corrente all'interno di un controller è:

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

ha funzionato perfettamente per me. –