-----
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
-----------