Attualmente sto leggendo e lavorando gli esempi in Getting Started with Grails, Second Edition by Scott Davis & Jason Rudolph.Impedire che il metodo in Grails Controller venga esposto come azione
Questo libro è stato scritto utilizzando Grails 1.2.
Hanno un esempio di codice in cui creano un metodo debug()
chiamato da beforeInterceptor
e ha spiegato che dal momento che debug()
è un metodo, non viene esposto all'utente tramite URL. Spiegano che le chiusure sono esposte come azioni del controllore all'utente finale, ma i metodi non lo sono.
Ho anche visto sul Grails 1.3 documentation, alludono ad un metodo normale:
def auth() { ... }
essere trattati come privato perché è un metodo, non una chiusura. Il che era vero a partire da Grails 1.3.
Tuttavia, a partire da Grails 2.0.0, Controller Actions can be implemented as both methods and closures.
Questo mi ha portato a chiedermi (e provare a capire) un modo per replicare la funzionalità disponibile in Pre-Grails 2.0.0 di creare un metodo in un controller che non viene esposto all'utente finale.
Ho pensato a 2 possibili approcci e mi chiedevo quale sarebbe stato migliore stile/pratica e perché?
- Impostazione di accesso come private, vale a dire
private def auth()
Impostazione allowedMethods per il metodo di stringa vuota:
static allowedMethods = [save: "POST", update: "POST", delete: "POST", auth: ""]
entrambi gli approcci sembrano per ottenere l'effetto desiderato. Tuttavia, il primo approccio fornisce un codice di errore HTTP 404 e il secondo approccio fornisce un codice di errore HTTP 405.
Qualcuno sa quale approccio sarebbe preferibile? Inoltre, ci sono altri approcci o una "tecnica delle migliori pratiche" per farlo?
+1, i metodi che non devono essere esposti solo non devono essere "esposti", non "non consentire". – shihpeng