我是cakephp的初学者,请帮帮我。当我想要验证在形式cakephp中选择的输入类型时,我已经卡住了,数据是详细的,那里有很多行,第一行。
<select id="AirWayBillDetail0ItemId" name="data[AirWayBillDetail][0][item_id]">
<option value="">-- Select an Item --</option>
<option value="9">Handphone</option>
<option value="10">Accecoris</option>
<option value="11">Alat Tulis Kantor</option>
<option value="12">Voucher Fisik</option>
</select>
我想要这个选项,只需要一次使用。
实施例: 添加第一行,我选择手机, 所以,第二行,不能使用该选项。有没有办法解决我的麻烦?
我可以在模型或视图或控制器中进行验证吗?使用javascript或jquery?
答案 0 :(得分:1)
您可以使用jQuery实现此功能。
请参考这个小提琴http://jsfiddle.net/sqy1n6n3/1/
$('select').on('change', function() {
$('select').find('option').prop('disabled', false);
$('select').each(function() {
$('select').not(this).find('option[value="' + this.value + '"]').prop('disabled', true);
});
});
答案 1 :(得分:1)
您想在模型或控制器层中检查此项。永远不要依赖JavaScript进行验证,因为这可能会导致应用程序出现漏洞(JavaScript很容易被禁用)。您应该始终在服务器端进行验证,如果您想要一些额外的内联验证,可以使用客户端验证对此进行补充。
您要添加一项检查,表明您提交的数据中没有重复的item_id
。因此,您可以在控制器中执行以下操作: -
$itemIds = Hash::extract($this->request->data, 'AirWayBillDetail.{n}.item_id');
if (count($itemIds) !== count(array_unique($itemIds))) {
// Invalid item_ids
}
然后,您需要处理您希望显示错误消息的方式,并确保它不会继续保存。如果您想在模型中执行此操作,则需要在保存之前使用beforeSave()
回调查看$this->data
,如果已识别重复,则需要返回false
。