2011-05-27 53 views
1

我有以下的自定義表單Silverstripe - 表單自定義模板顯示錯誤的驗證錯誤

$list = DataObject::get('AreaOfExpertise'); 
foreach ($list as $l) { 
$source[$l->ID] = $l->Name; 
} 
$fields = new FieldSet(
new TextField('Customer'), 
new TextField('ProjectName'), 
new DateField('WinDate'), 
new TextareaField('Details'), 
new OptionsetField('AreaOfExpertiseID', 'Area Of Expertise', $source), 
new TextField('ProjectValueLength'), 
new TextField('DeliverTimeframe'), 
new TextField('ProjectTeam'), 
new TextField('Contact') 
); 
$actions = new FieldSet(
new FormAction('doSubmit', 'Submit') 
); 
$requiredFields = array(
'Customer', 
'ProjectName', 
'WinDate', 
'Details', 
'AreaOfExpertiseID', 
'ProjectValueLength', 
'DeliverTimeframe', 
'ProjectTeam', 
'Contact', 
); 
$validator = new RequiredFields($requiredFields); 
$form = new Form($this, 'SubmissionForm', $fields, $actions, $validator); 
$form->setTemplate('Forms/NewWinForm'); 
return $form; 

,我的這個表單模板

<form $FormAttributes> 
<% if Message %> 
<p id="{$FormName}_error" class="message $MessageType">$Message</p> 
<% else %> 
<p id="{$FormName}_error" class="message $MessageType" style="display: none"></p> 
<% end_if %> 

<fieldset id="formContainer" class="clearfix NewWinForm"> 

<div id="Customer" class="row field text"> 
<label class="left" for="{$FormName}_Customer">Customer</label> 
<div class="middleColumn">$dataFieldByName(Customer)</div> 
</div> 
<div id="ProjectName" class="row field text"> 
<label class="left" for="{$FormName}_ProjectName">Project name</label> 
<div class="middleColumn">$dataFieldByName(ProjectName)</div> 
</div> 
<div id="WinDate" class="row field text"> 
<label class="left" for="{$FormName}_WinDate">Win date</label> 
<div class="middleColumn">$dataFieldByName(WinDate)</div> 
</div> 
<div id="AreaOfExpertiseID" class="row field text"> 
<label class="left" for="{$FormName}_AreaOfExpertiseID">Area of expertise</label> 
<div class="middleColumn">$dataFieldByName(AreaOfExpertiseID)</div> 
</div> 

<div id="Details" class="row field textarea"> 
<label class="left" for="{$FormName}_Details">Project details</label> 
<div class="middleColumn">$dataFieldByName(Details)</div> 
</div> 
<div id="ProjectValueLength" class="row field text"> 
<label class="left" for="{$FormName}_ProjectValueLength">Project value/length</label> 
<div class="middleColumn">$dataFieldByName(ProjectValueLength)</div> 
</div> 
<div id="DeliverTimeframe" class="row field text"> 
<label class="left" for="{$FormName}_DeliverTimeframe">Delivery timeframe</label> 
<div class="middleColumn">$dataFieldByName(DeliverTimeframe)</div> 
</div> 
<div id="ProjectTeam" class="row field text"> 
<label class="left" for="{$FormName}_ProjectTeam">Project team</label> 
<div class="middleColumn">$dataFieldByName(ProjectTeam)</div> 
</div> 
<div id="Contact" class="row field text"> 
<label class="left" for="{$FormName}_Contact">Contact</label> 
<div class="middleColumn">$dataFieldByName(Contact)</div> 
</div> 
</fieldset> 
<div class="Actions"> 
<% if Actions %> 
<% control Actions %>$Field<% end_control %> 
<% end_if %> 
</div> 
</form> 

當我提交表單,而不是「請填寫「客戶」,需要。「消息我得到「請填寫」這個「,這是需要。」

這發生在除之外的所有領域詳情 field!

有人能告訴我我做錯了什麼嗎?它正在殺死我......

+0

如果我刪除'$ form-> setTemplate('Forms/NewWinForm');',一切正常。 – Optimus 2011-05-27 20:42:02

回答

1

好,在sapphire/javascript/Validator.js一些挖後,我發現,第一類包裝的div必須field所以我換成這個 <div id="Customer" class="row field text"><div id="Customer" class="field text row">,一切工作就好了。

0

這應該通過創建一個窗體類並實現「forTemplate()」函數來完成。見SilverStripe Forms

此外,您不需要像創建「AreaOfExpertise」源數組那樣使用便捷方法toDropDownMap(),它可以爲您完成此操作。

$source = $list->toDropDownMap('ID', 'Name'); 

希望這會有所幫助。

+0

感謝您的回覆。但它沒有奏效。在錯誤消息中,我仍然獲取** this **而不是字段名稱。這裏是我剛剛創建的表單類[link](http://pastebin.com/bPTfx77v) – Optimus 2011-05-31 06:46:40

相關問題