§Form şablon yardımcıları
Play form alanlarını HTML şablonlarında sunmanıza yardımcı olmak için birçok yardımcı sağlar.
§Bir <form>
etiketi yaratmak
İlk yardımcı <form>
etiketini yaratır. Bu, otomatik olarak action
ve method
etiket parametrelelerini, ilettiğiniz ters rotaya göre ayarlayan basit bir yardımcıdır:
@helper.form(action = routes.Application.submit()) {
}
Ayrıca üretilecek HTML’ye eklenecek bir ilave parametre dizisi de geçirebilirsiniz:
@helper.form(action = routes.Application.submit(), 'id -> "myForm") {
}
§Bir <input>
elementi sunmak
views.html.helper
paketinde birçok girdi yardımcısı vardır. Onları bir form alanı ile beslersiniz ve onlar uyan HTML form kontrolünü, doldurulmuş değer, kısıtlama ve hatalarla gösterirler:
@(myForm: Form[User])
@helper.form(action = routes.Application.submit()) {
@helper.inputText(myForm("email"))
@helper.inputPassword(myForm("password"))
}
As for the form
helper, you can specify an extra set of parameters that will be added to the generated HTML:
@helper.inputText(myForm("email"), 'id -> "email", 'size -> 30)
Not: İsimleri
_
ile başlayanlar hariç, bütün ilave parametreler üretilen HTML’ye eklenecektir. Alt çizgi ile başlayan argümanlar (ileride göreceğimiz) alan constructor argümanları için ayrılmıştır.
§HTML girdi üretimini kendi kendinize halletmek
Aynı zamanda istenen HTML sonucunu kodlamanıza izin veren daha genel bir input
yardımcısı da vardır:
@helper.input(myForm("email")) { (id, name, value, args) =>
<input type="date" name="@name" id="@id" @toHtmlArgs(args)>
}
§ Alan constructor’ları
Sunulan bir alan sadece bir <input>
etiketi içermekle kalmayıp, aynı zamanda <label>
ve CSS çatınızda field’ı süslemek için kullanılan başka birtakım etiketleri de içerebilir.
Bütün girdi yardımcıları bu kısmı üstlenen bir FieldConstructor
alırlar. Varsayılanı (yani kapsamda başka bir field constructor’ı yoksa kullanılan) bunun gibi bir HTML üretir:
<dl class="error" id="email_field">
<dt><label for="email">Email:</label></dt>
<dd><input type="text" name="email" id="email" value=""></dd>
<dd class="error">This field is required!</dd>
<dd class="error">Another error</dd>
<dd class="info">Required</dd>
<dd class="info">Another constraint</dd>
</dl>
Bu varsayılan alan constructor’ı input yardımcı argümanlarında geçirebileceğiniz ilave seçenekleri destekler:
'_label -> "Custom label"
'_id -> "idForTheTopDlElement"
'_help -> "Custom help"
'_showConstraints -> false
'_error -> "Force an error"
'_showErrors -> false
§Kendi field constructor’ınızı yazmak
Sıklıkla, kendi alan constructor’ınızı yazmak isteyeceksiniz. Şöyle bir şablon yazarak başlayın:
@(elements: helper.FieldElements)
<div class="@if(elements.hasErrors) {error}">
<label for="@elements.id">@elements.label</label>
<div class="input">
@elements.input
<span class="errors">@elements.errors.mkString(", ")</span>
<span class="help">@elements.infos.mkString(", ")</span>
</div>
</div>
Bunu views/
içine kaydedin ve myFieldConstructorTemplate.scala.html
ismini verin.
Not: Bu sadece basit bir örnektir. Bunu istediğiniz kadar karmaşıklaştırabilirsiniz. Aynı zamanda
@elements.field
ı kullanarak orijinal alana erişebilirsiniz.
Şimdi bunu kullanarak bir yerlerde bir FieldConstructor
yaratın:
@implicitField = @{ FieldConstructor(myFieldConstructorTemplate.f) }
@inputText(myForm("email"))
§Tekrar eden değerleri işlemek
Son yardımcı tekrar eden değerler için girdi yaratmayı kolaylaştırır. Bu şekilde bir form tanımınız olduğunu varsayın:
public class UserForm {
public String name;
public List<String> emails;
}
Şimdi emails
alanı için formun içerdiği kadar çok girdiyi üretmek zorundasınız. Bunun için basitçe repeat
yardımcısını kullanın:
@helper.inputText(userForm("name"))
@helper.repeat(userForm("emails"), min = 1) { emailField =>
@helper.inputText(emailField)
}
Karşılık gelen form verisi boş olsa bile gösterilecek en az sayıda alanı belirtmek için min
parametresni kullanın.
Sonraki: CSRF karşısında korunmak
Dokümantasyonun bu çevirisi Play ekibi tarafından yapılmamaktadır. Eğer bir hata bulduysanız, bu sayfanın kaynak kodu burada bulunmaktadır. Dokümantasyon yönergelerini okuduktan sonra lütfen katkı yapmaktan çekinmeyin.