Модуль CRUD и вложенная модель и/или контроллер

Можно ли поместить Entity во вложенную папку/пакет и по-прежнему использовать модуль CRUD для базового администрирования?

Я использую приложение YABE, playframework 1.2.4.

Я создал еще одну сущность под названием «Страница» и попытался поместить ее в подпапку с именем «cms» во всех папках следующим образом:

models
-- cms
   -- Page.java
etc.

Существующая ссылка для объектов YABE создается следующим образом:

<a href="@{Users.list()}">Users</a>

который создает маршрут admin/users и ведет вас на страницу, сгенерированную CRUD.

но если вы поместите что-то вроде этого, например. также создайте контроллер внутри вложенной папки:

<a href="@{cms.Pages.list()}">Pages</a>

генерирует ссылку, подобную этой cms.pages/list и ведет вас к "Не найдено"

Даже если я помещу контроллер в корневую папку контроллеров, это не сработает, очевидно, потому что модуль CRUD не может найти класс модели, потому что он находится в подпапке.

Когда классы, связанные со страницей, находятся в корне контроллеров и моделей, все работает нормально, но я хочу здесь что-то вроде «пакетов».

Что я делаю неправильно?

Возможно ли что-то подобное?

Будет ли работать, если я перенесу все в отдельный модуль?


person zarko.susnjar    schedule 15.02.2012    source источник


Ответы (1)


Это возможно. Однако я обнаружил, что сохранение CRUD-моделей для сущностей в другом пакете немного усложнило задачу и не добавило особой ценности.

В любом случае убедитесь, что ваши контроллеры используют аннотацию @CRUD.for, чтобы они знали, какой сущностью управлять:

@CRUD.For(User.class)
public class Users extends CRUD {
}

Если вам нужно поместить свои представления в подпакет, играйте в crud:ov --template cms/Users/list не будет работать должным образом, за исключением случаев, когда вы взломаете crud commands.py с помощью чего-то вроде:

p = a.split('/')[0]
c = a.split('/')[1]
t = a.split('/')[2]
app.override('app/views/CRUD/%s.html' % t, 'app/views/%s/%s/%s.html' % (p, c, t))

Я точно не помню, но думаю, вам может понадобиться переопределить правила маршрутизации, например:

GET       /cms/?          cms.Users.index
GET       /cms/users      cms.Users.list
GET       /cms/users/new  cms.Users.blank
GET       /cms/users/{id} cms.Users.show
person emt14    schedule 15.02.2012
comment
С модулями такая же ситуация? Мне не нравилось, как работают модули в Play!, поэтому я попробовал делать пакеты в одном приложении. - person zarko.susnjar; 16.02.2012
comment
Это специфично для модуля crud. За исключением контроллера/представлений/моделей, вы можете упаковать свои классы по своему усмотрению, если хотите. Модули отлично подходят для добавления функциональности вашему приложению, но если вам нужно больше контроля, вы всегда можете отредактировать и включить код модулей в свое приложение. - person emt14; 18.02.2012