-----
Phần x33. CakePHP2
– Đổi mật khẩu, ràng buộc ở controller
Xem (clip số 35a – chickenrainshop):
- Đổi mật khẩu cho người dùng
- Ràng buộc mật khẩu tại controller (7":02)
- Kiểm tra thỏa ràng buộc - validates (8":53)
- strcmp (12":20)
Đổi mật khẩu cho người dùng:
Vào tập tin default.ctp để tạo link cho mục ‘Đổi mật khẩu’
trên giao diện.
[default.ctp]
<li><a href="">Cập nhật thông
tin</a></li>
<li><?php echo
$this->Html->link('Đổi mật khẩu', '/doi-mat-khau'); ?></li>
<li><a
href="">Lịch sử mua hàng</a></li>
<li><?php
echo $this->Html->link('Đăng xuất', '/logout'); ?></li>
Vào UsersController.php để viết hàm change_password:
[UsersController.php]
public
$components = array('Paginator');
/**
* đổi mật khẩu
*/
public function changePassword() {
$this->set('title_for_layout', 'Đổi mật
khẩu');
}
Vào routes.php để thực hiện route cho chức năng
‘doi-mat-khau’:
[routes.php]
Router::connect('/login', ['controller' => 'users', 'action'
=> 'login']);
Router::connect('/doi-mat-khau',
['controller' => 'users', 'action' => 'changePassword']);
Tạo view cho action changePassword:
[View\Users\change_password.ctp]
<div class="panel panel-info">
<h4
class="panel-heading"><span class="glyphicon
glyphicon-user"> Đổi mật khẩu</span></h4>
<?php if
(!empty($userInfo)): ?>
<?php
echo $this->Flash->render('auth'); ?>
<?php
echo $this->Form->create('User', ['class' => 'form-horizontal',
'novalidate' => true, 'inputDefaults' => ['label' => false]]); ?>
<div
class="control-group">
<label
class="control-label" for="inputUsername">Mật khẩu
mới</label>
<div
class="controls">
<?php
echo $this->Form->input('password', ['placeholder' => 'Nhập mật khẩu
mới']); ?>
</div>
</div>
<div
class="control-group">
<label
class="control-label" for="inputPassword">Xác nhận mật
khẩu</label>
<div
class="controls">
<?php
echo $this->Form->input('confirmPassword', ['placeholder' => 'Xác nhận
mật khẩu', 'type' => 'password']); ?>
</div>
</div>
<div
class="control-group">
<div
class="controls">
<?php
echo $this->Form->button('Lưu', ['type' => 'submit', 'class' =>
'col-lg-2 btn btn-primary']); ?>
</div>
</div>
<?php
echo $this->Form->end(); ?>
<?php else:
?>
Bạn
chưa đăng nhập, bấm vào <?php echo $this->Html->link('đây', '/login');
?> để đăng nhập.
<?php endif
?>
</div>
Ràng buộc dữ liệu cho trường password và confirmPassword:
[Model\User.php]
'password' => array(
'notBlank'
=> array(
'rule'
=> array('notBlank'),
'message'
=> 'Mật khẩu không được để trống',
//'allowEmpty'
=> false,
//'required'
=> false,
//'last'
=> false, // Stop validation after this rule
//'on'
=> 'create', // Limit validation to 'create' or 'update' operations
),
'minlength'
=> array(
'rule'
=> array('minlength', 5),
'message'
=> 'Mật khẩu ít nhất là 5 kí tự',
)
),
'confirmPassword'
=> array(
'notBlank'
=> array(
'rule'
=> array('notBlank'),
'message'
=> 'Mật khẩu không được để trống',
)
),
'email'
=> array(
Hiển thị thông báo lỗi lên view:
[change_password.ctp]
<?php echo $this->Flash->render('auth'); ?>
<?php echo $this->element('errors');
?>
<?php
echo $this->Form->create('User', ['class' => 'form-horizontal',
'novalidate'
Không hiển thị thông báo lỗi ngay dưới input:
[change_password.ctp]
<?php echo
$this->Form->input('password', ['placeholder' => 'Nhập mật khẩu mới', 'error' => false]); ?>
…
<?php echo
$this->Form->input('confirmPassword', ['placeholder' => 'Xác nhận mật
khẩu', 'type' => 'password', 'error'
=> false]); ?>
Viết tiếp xử lý trong action changePassword:
if ($this->User->validates()) {
//trrcmp trả về 0 nếu giống nhau
if
(strcmp($this->request->data['User']['password'],
$this->request->data['User']['confirmPassword']) == 0) {
} else {
$this->Flash->error('Xác
nhận mật khẩu không đúng.',
['params'
=> [
'class'
=> 'alert alert-danger'
]
]);
}
}
else {
$this->set('errors',
$this->User->validationErrors);
-----------
Cập nhật 29/6/2017
-----------