Ngu ngơ học làm web (x47) - CakePHP2 - Xóa folder, upload tập tin, upload ảnh

Tiếp theo của: Ngu ngơ học làm web (x46) - CakePHP2 – CKEditor, block, lọc dấu tiếng Việt, folder
-----

Phần x47. CakePHP2 – Xóa folder, upload tập tin, upload ảnh


Xem (clip số 45b – chickenrainshop):

- Xóa thư mục (45b)

- Cập nhật dữ liệu trong mySQL (2":21)

Trong clip có hướng dẫn tạo thêm trường folder trong bảng categories, tuy nhiên để ý thấy nội dung trường folder giống với trường slug, nên không tạo thêm trường folder nữa mà sử dụng luôn trường slug để làm việc.

Đưa câu khai báo sử dụng Folder lên đầu [CategoriesController.php]

<?php
App::uses('AppController', 'Controller');
App::uses('Folder', 'Utility');

Thực hiện xóa một Category, đồng thời xóa luôn thư mục chứa hình ảnh tương ứng:

[CategoriesController.php action admin_delete()]

public function admin_delete($id = null) {
                        $this->Category->id = $id;
                        if (!$this->Category->exists()) {
                                    throw new NotFoundException(__('Invalid category'));
                        }
                        $this->request->allowMethod('post', 'delete');
                        $category = $this->Category->findById($id);
                        $folder = new Folder(APP.'webroot/files/'.$category['Category']['slug']);
                        if ($folder->delete()) {
                                    if ($this->Category->removeFromTree($id, true)) {
                                                $this->Flash->success(__('The category has been deleted.'));
                                    } else {
                                                $this->Flash->error(__('The category could not be deleted. Please, try again.'));
                                    }
                        } else {
                                                $this->Flash->error(__('Không xóa được thư mục. Vui lòng thử lại sau.'));
                                    }
                        return $this->redirect(array('action' => 'index'));
            }

Xem (clip số 46a – chickenrainshop):

- upload ảnh (46a)

- Html->image (1":19)

- Khai báo type='file' trong form  (3":19)

- uploadFile (8":05)

Tải một tập tin ảnh lên server, thực hiện minh họa trên trang ‘edit một cuốn sách’.

Hiển thị ảnh lên view:

[View\Books\admin_edit.ctp]

<?php echo $this->Form->create('Book', ['novalidate' => true, 'type' => 'file']); ?>
            <fieldset>
                        <legend><?php echo __('Edit Book'); ?></legend>
            <?php
                        echo $this->Form->input('id');
                        echo $this->Form->input('category_id');
                        echo $this->Form->input('title');
                        echo $this->Form->input('slug');
                        echo $this->Html->image($this->request->data['Book']['image'], ['width'=>140, 'height' => 180]);
                        echo $this->Form->input('image',['label' => '', 'type' => 'file']);

Viết hàm uploadFile():

Khai báo sử dụng class File ở đầu tập tin BooksController.php:

<?php
App::uses('AppController', 'Controller');
App::uses('File', 'Utility');

[BooksController.php]

public function admin_edit($id = null) {
                        if (!$this->Book->exists($id)) {
                                    throw new NotFoundException(__('Invalid book'));
                        }
                        if ($this->request->is(array('post', 'put'))) {
                                    $this->checkSlug($this->request->data, 'Book', 'title');
                                    $this->loadModel('Category');
                                    $category = $this->Category->findById($this->request->data['Book']['category_id']);
                                    $save = true;
                                    if (!empty($this->request->data['Book']['image']['name'])) {
                                                if ($this->uploadFile($category['Category']['slug'])) {
                                                            $location = '/files/'.$category['Category']['slug'].'/'.$this->request->data['Book']['image']['name'];
                                                            $this->request->data['Book']['image'] = $location;
                                                } else {
                                                            $this->Flash->error(__('Không upload được ảnh, vui lòng thử lại!'));
                                                            $save = false;
                                                }          
                                    } else {
                                                unset($this->request->data['Book']['image']);
                                    }
                                    if ($save) {
                                                if ($this->Book->save($this->request->data)) {
                                                            $this->Flash->success(__('The book has been saved.'));
                                                            return $this->redirect(array('action' => 'index'));
                                                } else {
                                                            $this->Flash->error(__('The book could not be saved. Please, try again.'));
                                                }
                                    }                                  
                        } else {
                                    $options = array('conditions' => array('Book.' . $this->Book->primaryKey => $id));
                                    $this->request->data = $this->Book->find('first', $options);
                        }
                        $categories = $this->Book->Category->find('list');
                        $writers = $this->Book->Writer->find('list');
                        $this->set(compact('categories', 'writers'));

            }
-----------
Cập nhật 28/7/2017
-----------
Xem thêm:
Tổng hợp các bài viết về Ngu ngơ học làm web