2012-02-02 12 views
5

Il modulo CRUD non è in grado di convertire il nome di classe significativo nel framework di gioco. Ad esempio, se ho un modello di categoria e poi creo una classe Categories nella cartella controller per estendere CRUD, il collegamento Category non verrà visualizzato nella sezione admin. Tuttavia, se rinominare il file in "Categorys", funzionerà. C'è qualche soluzione per questo piccolo problema? Perché ho usato per giocare con CakePHP e funziona piuttosto bene con tutte le convenzioni di nomePlay Framework - Convenzione di denominazione CRUD

risposta

9

Secondo documentation of CRUD module of Play framework

nome della classe del controllore deve essere il nome della classe del modello con una ‘s’ finale.

Tuttavia, è possibile utilizzare @ CRUD.For) annotazioni (per personalizzare la denominazione del regolatore CRUD singolarmente:

package controllers; 

import models.Category; 

@CRUD.For(Category.class) 
public class Categories extends CRUD { 

} 

EDIT:

Dopo una rapida scrematura attraverso il codice sorgente del modulo CRUD, credo che la risoluzione del modello di denominazione è attorno alla riga 260 in {location di gioco} /modules/crud/app/controllers/CRUD.java (per la versione 1.2.4):

259    String name = controllerClass.getSimpleName().replace("$", ""); 
260    name = "models." + name.substring(0, name.length() - 1); 

Trova semplicemente il nome del modello cercando la parola senza l'ultimo carattere del nome del controller. (L'ho appena testato, potresti anche nominare il tuo controller CRUD come 'Categoryz'. E funziona perfettamente)

Quindi, se vuoi davvero sistemarlo in un modo 'convenzionale', puoi modificare la linea 260 di CRUD.java e utilizza qualche libreria per la conversione al plurale singolare come Inflector in ModeShape. Ma a mio parere, l'uso dell'annotazione @ CRUD.For è perfetto e più economico.

Problemi correlati