我在CakePHP中有一個包含兩個實時搜索文本輸入的表單。當用戶選擇結果時,它們中的每一個都會更新隱藏字段的值。該模式被稱爲Record
,以及所涉及的屬性是在使用安全組件和jQuery的CakePHP表單中禁用輸入元素
budget_id
program_id
concept_id
我已經創建了以這種方式使用的表單助手形式:
...
<?php echo $this->Form->create('Record') ?>
<h1>Create a record</h1>
<?php echo $this->Form->hidden('Record.budget_id', array('value' => $budget['Budget']['id'])) ?>
<?php echo $this->Form->hidden('Record.program_id') ?>
<?php echo $this->Form->input('Record.program_id_search', array(...)) ?>
<?php echo $this->Form->hidden('Record.concept_id') ?>
<?php echo $this->Form->input('Record.concept_id_search', array(...)) ?>
<?php echo $this->Form->submit('Send') ?>
<?php echo $this->Form->end(); ?>
...
如您所見,存儲模型屬性的輸入字段是隱藏的。實時搜索框配置了jQuery的自動完成插件。
繼CakePHP的手動建議我已經禁用了兩個額外的字段beforeFilter
方法,使安全組件忽略它們和形式通過驗證:
public function beforeFilter() {
$this->Security->disabledFields = array(
'Record.program_id_search',
'Record.concept_id_search',
);
}
看來,每當我改變CakePHP的生氣來自Javascript的隱藏輸入值,它將我發送到黑洞方法。根據文檔,這沒問題。
但令我驚訝的是,安全組件一直忽略我的disabledFields
設置。
我一直在搜索幾個網絡資源,每個人都指向disabledFields
選項。但它不適合我。
有什麼建議嗎?
謝謝!
UPDATE
我已經找到了一個解決辦法,但它的的確確是難看。我用常規選擇字段替換了隱藏的輸入字段,但將CSS顯示屬性設置爲none
。
這樣安全組件就不會再抱怨了,用戶一直在查看幾個實時搜索框。
我不明白爲什麼用Javascript改變選擇沒關係,但是改變一個隱藏的輸入。
我已經用你提出的相同解決方案編輯了我的問題。另一方面,[關於安全組件的CakePHP文檔](http://book.cakephp.org/view/1308/Usage)告訴''beforeFilter'是配置組件的正確位置。 – elitalon
是的,對不起,我沒有看到這個函數的名字,我以爲你是直接在某個動作中做的。 :) – entropid