Расширенная настройка CRUD-форм и контроллеров в игре
то, что я ищу, - это способность быстро (сушить!) создание форм для данных моделей, но менее контролируемым способом, чем использование форм/моделей CRUD; например, путем использования тегов crud без полных контроллеров/маршрутов crud или путем их строгой настройки.
поясню на примере.
у меня есть модель A, чем ссылки (ManyToOne) на 2 модели, B и C
class public A extends Model {
public String name;
@ManyToOne
public A a;
@ManyToOne
public B b;
}
Я хотел бы иметь возможность написать следующее маршруты:
/A/{id}/B/ somecontroller
/A/{id}/C/ some(other?)controller
или еще лучше:
/A/{id}/{submodel}/ somecontroller
и в соответствующем html-представлении можно сделать что-то вроде:
<div>object.name</div>
#{form action:@save(object.b._key()), enctype:'multipart/form-data'}
#{crud.form object.b /}
<p class="crudButtons">
<input type="submit" name="_save" value="&{'crud.save', type.modelName}" />
<input type="submit" name="_saveAndContinue" value="&{'crud.saveAndContinue', type.modelName}" />
</p>
#{/form}
где "объект" - это не экземпляр "b" или "c", а "a", и я могу сказать #{crud.form /}
какую модель он должен отображать (в данном случае 'b')
есть ли способ достичь чего-то подобного?
вопрос мог быть решен либо:
- есть ли простой
#{form MODEL} #{/form}
тэг?!
или, будучи в состоянии как-то настроить больше CRUD, например.
- есть ли способ изменить основной модуль crud и переопределить только нужные методы (без копирования всего этого!)?
Я боюсь, что не могу достичь этой цели, просто переопределив модельный контроллер CRUD, возможно, я ошибаюсь, но помимо чтения кода CRUD( что я делаю), официальный документ немного ограничен тем, какие методы можно переопределить и как...
по теме: как создать HTML-форму для модели в playframework
Я также только что нашел этот поток почты google это, кажется, идет в направлении customize-crud. Я надеялся на более нестандартное решение для такой типичной потребности...
1 ответов
я нашел в этой играть! группы Google-нить ответ, который я искал.. все уже есть, хотя и недокументировано!
это так же просто, как использование:
для отображения формы создания класса Model.
#{crud.form class:'models.ModelName' /}
для отображения формы выпуска любого существующего экземпляра
#{curd.form object:anyInstance /}
тогда вы можете идти, как хотите, но это мой шаблон для редактирования существующих объектов:
в вашей шаблон
#{form @Controller.Action, method="POST" ... }
<input type="hidden" name="object.id" value="${myobject.ID}" />
#{crud.form object:gun.gunEngraving}
#{/crud.form}
<p>
<input type="submit" value="Save Changes" />
</p>
#{/form}
скрытый вход устанавливает специальное поле " id " так, чтобы:
в вашем контроллере.Действие
function static void Action(routeParams, MyModel object) {
some validation;
object.save();
render or renderTemplate or other action for redirect;
}
это, конечно, упрощенный код, но мне очень нравится этот шаблон, когда мне быстро нужно вставить форму в представление и не могу/не хочу использовать всю систему CRUD!
[Edit] более продвинутый пользовательский CRUD goodness
теги crud на самом деле не нуждаются в модуле crud.
Так что я в конечном итоге копирование по всему моему проекту, взлом их, чтобы добавить дополнительные интересные функции, такие как возможность изменить имя объекта в форме от "объекта" по умолчанию (я решил переопределить оригиналы, но вы можете сделать свой собственный, просто используя другую папку, чем tags/crud
для пространства имен)