[Công nghệ Thông tin] -- [Web] -- [Công nghệ phần mềm] -- [PhoThong] -- [TỪ ĐIỂN] -- [----] -- [Học viên cũ] -- [10.000 giờ]
--------------- <> -----------------
---  KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
---  Nhận làm website, web app, chạy quảng cáo, digital marketing --->>>  LIÊN HỆ...

Tìm kiếm trong Blog

Hiển thị các bài đăng có nhãn Đổi mật khẩu. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Đổi mật khẩu. Hiển thị tất cả bài đăng

Ngu ngơ học làm web (x33) - CakePHP2 - Đổi mật khẩu, ràng buộc ở controller

Tiếp theo của: Ngu ngơ học làm web (x32) - CakePHP2 – getUser, chỉ thực hiện khi đã đăng nhập
-----

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
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web