Просто пытаюсь сделать довольно стандартную страницу редактирования пользователя. «Пароль» и «повторный пароль» сначала скрыты, но их можно включить, нажав кнопку «Редактировать пароль».
Но я продолжаю получать ошибку черной дыры «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>