-----
Phần x48. CakePHP2
– Hàm end(), upload và xóa tập tin
Xem (clip số 46b – chickenrainshop):
- Lấy phần mở rộng của một file, hàm explode
(46b)(2":17)
- Hàm end (3":04)
Đổi tên tập tin hình ảnh khi upload lên server để tránh ghi
đè vào các tập tin đã có sẵn trước đó, tên của tập tin hình ảnh chính là slug
của cuốn sách.
Chỉnh sửa hàm uploadFile().
[BooksController.php]
private function uploadFile($folder = null) {
$file
= new File($this->request->data['Book']['image']['tmp_name']);
$arr
= explode('.', $this->request->data['Book']['image']['name']);
$ext
= end($arr);
$fileName
= $this->request->data['Book']['slug'].'.'.$ext;
if
($file->copy(APP.'webroot/files/'.$folder.'/'.$fileName)) {
$result
= [
'status'
=> true,
'fileName'
=> $fileName
];
}
else {
$result
= [
'status'
=> false,
'fileName'
=> $fileName
];
}
return
$result;
}
Sửa lại action admin_edit()
[BooksController.php]
public function admin_edit($id = null) {
…
if
(!empty($this->request->data['Book']['image']['name'])) {
$result =
$this->uploadFile($category['Category']['slug']);
if
($result['status']) {
$location =
'/files/'.$category['Category']['slug'].'/'.$result['fileName'];
$this->request->data['Book']['image']
= $location;
…
}
Xem (clip số 46c – chickenrainshop):
Cho phép upload tập tin hình ảnh trong view ‘thêm một cuốn
sách’ (Add Book).
[View\Books\admin_add.ctp]
…
<div class="books form">
<?php echo $this->Form->create('Book', ['type' => 'file']); ?>
<fieldset>
<legend><?php
echo __('Add Book'); ?></legend>
<?php
echo
$this->Form->input('category_id');
echo
$this->Form->input('title');
echo
$this->Form->input('slug');
echo
$this->Form->input('image', ['type'
=> 'file']);
…
[BooksController.php]
public function admin_add() {
if
($this->request->is('post')) {
$this->checkSlug($this->request->data,
'Book', 'title');
$this->loadModel('Category');
$category =
$this->Category->findById($this->request->data['Book']['category_id']);
$result =
$this->uploadFile($category['Category']['slug']);
if ($result['status']) {
$location =
'/files/'.$category['Category']['slug'].'/'.$result['fileName'];
$this->request->data['Book']['image']
= $location;
$this->Book->create();
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 {
$this->Flash->error(__('Bạn
chưa upload hình ảnh cho sách!'));
}
}
$categories
= $this->Book->Category->generateTreeList();
$writers
= $this->Book->Writer->find('list');
$this->set(compact('categories',
'writers'));
}
Thực hiện xóa tập tin hình ảnh:
[BooksController.php]
Thêm prefix admin vào trước action delete.
public function admin_delete($id = null) {
Thay đổi nội dung bên trong action admin_delete():
[BooksController.php]
public function admin_delete($id = null) {
$this->Book->id
= $id;
if
(!$this->Book->exists()) {
throw
new NotFoundException(__('Invalid book'));
}
$this->request->allowMethod('post',
'delete');
$book
= $this->Book->findById($id);
$file
= new File(APP.'/webroot/'.$book['Book']['image']);
if
($file->delete()) {
if
($this->Book->delete()) {
$this->Flash->success(__('The
book has been deleted.'));
}
else {
$this->Flash->error(__('The
book could not be deleted. Please, try again.'));
}
}
else {
$this->Flash->error(__('Không
xóa được file hình ảnh, vui lòng thử lại sau!'));
}
return
$this->redirect(array('action' => 'index'));
}
-----------
Cập nhật 29/7/2017
-----------