我只是想创建一个标准的用户编辑页面。"密码"和"重新输入密码"一开始是隐藏的,但可以通过点击"编辑密码"按钮来显示。
然而,我一直收到安全组件的"auth"黑洞错误。
根据CakePHP手册,我在视图中尝试使用以下代码解锁字段(在字段之前、之后、表单内部、表单之前和表单结尾都试过):
$this->Form->unlockField('User.password');
$this->Form->unlockField('User.re-password');
但是这并没有帮助。我唯一让它工作的方法是完全解锁整个操作(似乎不是理想的方法):
$this->Security->unlockedActions = array('admin_edit');
如果我不禁用这些字段,那么它会正常工作,但是我需要禁用它们,因为如果不禁用,内置的“notEmpty”属性在查找这些字段时会导致javascript错误。
视图/HTML:
<div id="edit-password-area" style="display:none;">
<div class="form-group">
<label>Password</label>
<?php echo $this->Form->input('User.password', array('class'=>'input-xxlarge form-control', 'value'=>'', 'disabled'=>'disabled')); ?>
<p class="note">Must be at least 8 characters in length.</p>
</div>
<div class="form-group">
<label>Verify Password</label>
<?php echo $this->Form->input('User.re_password', array('type'=>'password', 'class'=>'input-xxlarge form-control', 'value'=>'', 'disabled'=>'disabled')); ?>
<p class="note">Must exactly match the "Password".</p>
</div>
</div>
<div id="edit-password-button-area">
<a href="javascript:showPasswordArea();">Edit Password</a>
</div>
<div id="dont-edit-password-button-area" style="display:none;">
<a href="javascript:hidePasswordArea();">Don't Edit Password</a>
</div>
Javascript:
<script>
function showPasswordArea() {
$('#edit-password-area').show();
$('#edit-password-area input').removeAttr('disabled');
$('#dont-edit-password-button-area').show();
$('#edit-password-button-area').hide();
$('#UserPassword').focus();
}
function hidePasswordArea() {
$('#edit-password-area').hide();
$('#edit-password-area input').prop('disabled', 'disabled');
$('#dont-edit-password-button-area').hide();
$('#edit-password-button-area').show();
}
</script>