Расширенная настройка 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 для пространства имен)