SlideShare a Scribd company logo
1 of 14
Download to read offline
Upload file và Multi upload files trong ZF2
Xem 'Bài 8 - Thao tác Database trong Zend Framework 2' trước khi thực hành bài này
A. Upload File trong Zend Framework 2.0
- Bây giờ chúng ta sẽ tìm hiểu về cách Upload file 1 tập tin hoặc nhiều tập tin cùng một lúctrước khi
chúng ta đến các bài kế tiếp về Thêm – Xóa – Sửa dữ liệu
- Đầu tiên chúng ta sẽ tạo một CONTROLLER mới có
tên /module/Admin/src/Admin/Controller/UploadController.php có nội dung như sau:
<?php
namespace AdminController;
use ZendMvcControllerAbstractActionController;
use ZendViewModelViewModel;
class UploadController extends AbstractActionController
{
public function indexAction()
{
}
}
- Khi tạo ra một CONTROLLER mới chúng ta sẽ phải khai báo nó với MODULE vì vậy chúng ta mở tập
tin /module/Admin/config/module.config.php tìm đoạn mã
'controllers' => array(
'invokables' => array(
'AdminControllerIndex' => 'AdminControllerIndexController',
),
),
- Sửa lại thành:
'controllers' => array(
'invokables' => array(
'AdminControllerIndex' => 'AdminControllerIndexController',
'AdminControllerUpload' => 'AdminControllerUploadController'
),
),
- Tương ứng với UploadController chúng ta sẽ có một thư mục chứa các VIEW của các ACTION của
CONTROLLER này. Chúng ta tạo thư mục /upload trong thư mục /module/Admin/view/admin
- Trong UploadController có ACTION tên indexAction vì vậy chúng ta cần tạo một tập tin VIEW cho
ACTION này. Tạo tập tin /module/Admin/view/admin/upload/index.phtml có nội dung sau:
<h1>Upload File</h1>
- Bây giờ chúng ta chạy thử URL: localhost:8000/zf2basic/public/admin/upload/index chúng ta sẽ có giao
diện như sau:
- Sau khi chúng ta đã tạo xong một ACTION để upload hình ảnh. Chúng ta mở tập
tin /public/css/style.css thêm vào một đoạn mã CSS để tạo FORM
/*==============#appForm===================*/
#appForm{
width: 700px;
border: solid 1px #ccc;
}
#appForm ul{
list-style: none inside;
padding: 5px;
margin: 0px;
}
#appForm li{
padding: 5px;
border-bottom: dashed 1px #ccc;
}
#appForm li span{
font-weight: bold;
width: 150px;
display: inline-block;
}
#appForm .txtInput{
font-family: Arial, Helvetica, sans-serif;
font-size: 13px;
border: 1px solid #ccc;
padding: 3px;
}
.txtSort{
width: 200px;
}
.txtMedium{
width: 300px;
}
- Tiếp theo chúng ta tạo thư mục /Form trong thư mục /module/Admin/src/Admin. Thư mục này sẽ chứa
các CLASS tạo FORM trong MODULE của chúng ta
- Trong thư mục /module/Admin/src/Admin/Form chúng ta tạo 1 tập tin mới có tên UploadForm.php và
chúng ta đưa vào nội dung sau:
<?php
//Khai bao namespace cho class UploadForm
namespace AdminForm;
//Gọi đến CLASS chứa đối tượng tạo FORM
use ZendFormForm;
class UploadForm extends Form
{
public function __construct($name = null)
{
parent::__construct('appForm');
//Khai báo phương thức sử dụng trong FORM
$this->setAttribute('method', 'post');
//Khai báo kiểu dữ liệu được gửi lên server
$this->setAttribute('enctype','multipart/form-data');
//Khai báo phần tử textbox 'username'
$this->add(array(
'name' => 'picture',
'attributes' => array(
'type' => 'file',
'required' => 'required',
'class' => 'txtInput txtMedium'
),
'options' => array(
'label' => 'File upload:',
),
));
//submit
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Send data'
),
));
}
}
- Sau khi đã tạo UploadForm lúc này việc của chúng ta đưa FORM vào ACTION để chúng ta truyền ra
VIEW.
- Mở tập tin /module/Admin/src/Admin/Controller/UploadController.php thêm dòng lệnh sau vào đầu tập
tin
use AdminFormUploadForm;
- Tiếp theo chúng ta sẽ sửa lại nội dung của phương thức indexAction() như sau:
<?php
namespace AdminController;
use ZendMvcControllerAbstractActionController;
use ZendViewModelViewModel;
use AdminFormUploadForm;
class UploadController extends AbstractActionController
{
public function indexAction()
{
$form = new UploadForm();
$view = new ViewModel(array('form'=>$form));
return $view;
}
}
- Sau khi đã truyền giá trị từ ACTION ra ngoàiVIEW chúng ta sẽ in ra thông tin để xem
- Mở tập tin /module/Admin/view/admin/upload/index.phtml sửa lại nội dung như sau:
<h1>Upload File</h1>
<?php
//Lấy đối tượng AdminFormUploadForm từ trong VIEW ra
$form = $this->form;
$form->prepare();
echo "<pre>";
print_r($form);
echo "</pre>";
?>
- Tiếp theo chúng ta sẽ chạy thử URL: localhost:8000/zf2basic/public/admin/upload/index chúng ta sẽ có
giao diện sau
- Nếu thấy giao diện xuất hiện như trên điều này chứng tỏ đối tượng UploadForm đã hoạt động được. Bây
giờ chúng ta sẽ tiến hành việc chuyển đối tượng UploadForm thành mã HTML.
- Mở tập tin /module/Admin/view/admin/upload/index.phtml sửa lại nội dung như sau:
<h1>Upload File</h1>
<?php
//Lấy đối tượng AdminFormUploadForm từ trong VIEW ra
$form = $this->form;
$form->prepare();
?>
<!-- Tạo thẻ <form...> và các giá trị thuộc tính của thẻ này -->
<?php echo $this->form()->openTag($form);?>
<ul>
<li>
<!--In ra giá trị nhãn -->
<span><?php echo $this->formLabel($form->get('picture')); ?></span>
<!--Tạo phần tử HTML cho việc Upload -->
<?php echo $this->formElement($form->get('picture')); ?>
</li>
<li>
<!--Tạo nút Submit -->
<?php echo $this->formElement($form->get('submit'));?>
</li>
</ul>
<!-- Đóng thẻ </form> -->
<?php echo $this->form()->closeTag() ?>
- Chúng ta sẽ chạy thử URL: localhost:8000/zf2basic/public/admin/upload/index
- Các bạn nhìn thấy lỗi xuất hiện. Việc xuất hiện lỗi như thế này rất khó sửa vì trước khi thêm mã mới vào
chúng ta đã in ra được đối tượng UploadForm mà không có lỗi gì cả. Nhưng sau khi thêm lại xuất hiện
lỗi. Đoạn mã của chúng ta thêm viết đúng hoàn toàn nên chắc chắn không phải do đoạn mã trên gây ra.
- Trong đối tượng Zend/Form/Form có liên kết đến một đối tượng đó
là ZendI18nTranslatorTranslator để hỗ trợ cho việc chuyển đổi ngôn ngữ trên giao diện ứng dụng. Vì
vậy để sửa được lỗi này chúng ta cần khai báo đối tượng ZendI18nTranslatorTranslator trong tập
tin module.config.php của MODULE này . Chúng ta thực hiện như sau, mở
tập /module/Admin/config/module.config.php thêm một phần tử mới vào mảng cấu hình:
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
- Lúc này toàn nội dung tập tin /module/Admin/config/module.config.php sẽ như sau:
<?php
return array(
//Bat buoc phai co khong thi se co loi
//Phần này giúp
'controllers' => array(
'invokables' => array(
'AdminControllerIndex' => 'AdminControllerIndexController',
'AdminControllerUpload' => 'AdminControllerUploadController'
),
),
'router' => array(
'routes' => array(
'admin' => array(
'type' => 'segment',
'options' => array(
//'route' => '/album[/:controller][/:action][/][:id]',
'route' => '/admin[/][:controller][/][:action][/][id/:id]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
'id' => '[0-9]+',
),
'defaults' => array(
'__NAMESPACE__' => 'AdminController',//Khong co namespace thi se xay ra
loi
'controller' => 'AdminControllerIndex',
'action' => 'index',
),
),
),
),
),
//Bat buoc phai co thì mới load duoc View
'view_manager' => array(
/* 'template_map' => array(
'layout/layout' => __DIR__ . '/../view/layout/layout.phtml',
), */
'template_path_stack' => array(
'admin' => __DIR__ . '/../view'
),
),
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
);
- Sau khi thêm đoạn mã khai báo đối tượng ZendI18nTranslatorTranslator chúng ta thử refresh lại
URLlocalhost:8000/zf2basic/public/admin/upload/index
- Bây giờ chúng ta tạo một thư mục mới tên /files trong thư mục /public để chúng ta upload hình ảnh lên
- Tiếp theo chúng ta sẽ khai báo thêm một hằng số để lưu trữ đường dẫn đến thư mục upload files trong
tập tin /public/define.php. Mở tập tin /public/define.php thêm vào dòng lệnh sau:
define('FILES_PATH' , realpath(PUBLIC_PATH . '/files'));
- Bây giờ chúng ta chỉnh lại mã của indexAction() để upload được tập tin vào thư mục /public/files
public function indexAction()
{
$form = new UploadForm();
$view = new ViewModel(array('form'=>$form));
$request = $this->getRequest();
if ($request->isPost()) {
$files = $request->getFiles()->toArray();
$fileName = $files['picture']['name'];
$uploadObj = new ZendFileTransferAdapterHttp();
$uploadObj->setDestination(FILES_PATH);
if($uploadObj->receive($fileName)) {
echo "<br>Upload thanh cong";
}
}
return $view;
}
- Chúng ta refresh URL: localhost:8000/zf2basic/public/admin/upload/index. Nhấn chọn một tập tin bất
kỳ để upload, tiếp theo chúng ta nhấn nút “Send data”, sau đó chúng ta hãy thử kiểm tra thư
mục /public/files đã được upload lên hay chưa
B. Tạo hàm upload file cho ứng dụng
- Thực sự trong phần A chúng ta chúng ta đã upload được file nhưng để mã trong CONTROLLER gọn
hơn thì chúng ta nên tối ưu lại một chút.
- Bây giờ chúng ta sẽ tạo ra một ACTION mới có tên abcAction() trong tập
tin /module/Admin/src/Admin/Controller/UploadController.php và abcAction() sẽ có nội dung như sau
public function abcAction(){
$form = new UploadForm();
$view = new ViewModel(array('form'=>$form));
$request = $this->getRequest();
if ($request->isPost()) {
echo "du lieu dang duoc gui qua";
}
return $view;
}
- Sau khi tạo ACTION chúng ta sẽ tạo VIEW và VIEW của abcAction() sẽ có nội dung giống
với indexAction(). Tạo tập tin /module/Admin/view/admin/upload/abc.phtml với nội dung sau:
<h1>Upload File</h1>
<?php
//Lấy đối tượng AdminFormUploadForm từ trong VIEW ra
$form = $this->form;
$form->prepare();
?>
<!-- Tạo thẻ <form...> và các giá trị thuộc tính của thẻ này -->
<?php echo $this->form()->openTag($form);?>
<ul>
<li>
<!--In ra giá trị nhãn -->
<span><?php echo $this->formLabel($form->get('picture')); ?></span>
<!--Tạo phần tử HTML cho việc Upload -->
<?php echo $this->formElement($form->get('picture')); ?>
</li>
<li>
<!--Tạo nút Submit -->
<?php echo $this->formElement($form->get('submit'));?>
</li>
</ul>
<!-- Đóng thẻ </form> -->
<?php echo $this->form()->closeTag() ?>
- Bây giờ chúng ta sẽ xây dựng một hàm upload($files = array(),$file_path = '') có 2 tham số.
o Tham số ‘$files’ là mảng chứa thông tin của tập tin upload
o Tham số ‘$file_path’ là đường dẫn đến thư mục chứa file trên máy chủ
o Khi chạy phương thức này thì nó sẽ trả về cho chúng ta tên tập tin chúng ta đã upload lên máy chủ
- Lúc này chúng ta sẽ mở tập tin /module/Admin/src/Admin/Form/UploadForm.php thêm vào nội dung
sau:
public function upload($files = array(),$file_path = ''){
$fileName = '';
if(count($files) != 0 && $file_path != ''){
$fileName = $files['picture']['name'];
$uploadObj = new ZendFileTransferAdapterHttp();
$uploadObj->setDestination($file_path);
$uploadObj->receive($fileName));
}
return $fileName;
}
- Sau khi có phương thức upload() trong tập tin /module/Admin/src/Admin/Form/UploadForm.php chúng
ta có thể sử dụng phương thức này dễ dàng trong abcAction(). Mở tập
tin /module/Admin/src/Admin/Controller/UploadController.php sửa abcAction() lại thành:
public function abcAction(){
$form = new UploadForm();
$view = new ViewModel(array('form'=>$form));
$request = $this->getRequest();
if ($request->isPost()) {
echo 'Tap tin vua upload len server la: ';
echo $form->upload($request->getFiles()->toArray(),FILES_PATH);
}
return $view;
}
- Chúng ta refresh URL: localhost:8000/zf2basic/public/admin/upload/index. Nhấn chọn một tập tin bất
kỳ để upload, tiếp theo chúng ta nhấn nút “Send data”, sau đó chúng ta hãy thử kiểm tra thư
mục /public/files đã được upload lên hay chưa
C. Multi upload trong Zend Framework 2.0
- Bây giờ chúng ta sẽ qua phần ví dụ upload một lúc nhiều file. Đầu tiên chúng ta sẽ tạo tập
tin /module/Admin/src/Admin/Form/MultiUploadForm.php với nội dung như sau:
<?php
//Khai bao namespace cho class MultiUploadForm
namespace AdminForm;
//Gọi đến CLASS chứa đối tượng tạo FORM
use ZendFormForm;
class MultiUploadForm extends Form
{
public function __construct($name = null)
{
parent::__construct('appForm');
//Khai báo phương thức sử dụng trong FORM
$this->setAttribute('method', 'post');
//Khai báo kiểu dữ liệu được gửi lên server
$this->setAttribute('enctype','multipart/form-data');
//Khai báo phần tử textbox 'username'
$this->add(array(
'name' => 'picture1',
'attributes' => array(
'type' => 'file',
'required' => 'required',
'class' => 'txtInput txtMedium'
),
'options' => array(
'label' => 'File upload 1:',
),
));
$this->add(array(
'name' => 'picture2',
'attributes' => array(
'type' => 'file',
'required' => 'required',
'class' => 'txtInput txtMedium'
),
'options' => array(
'label' => 'File upload 2:',
),
));
$this->add(array(
'name' => 'submit',
'attributes' => array(
'type' => 'submit',
'value' => 'Send data'
),
));
}
}
- Mở tập /module/Admin/src/Admin/Controller/UploadController.php thêm vào multiAction() với nội
dung
public function multiAction(){
$form = new AdminFormMultiUploadForm();
$view = new ViewModel(array('form'=>$form));
$request = $this->getRequest();
if ($request->isPost()) {
echo 'Tap tin vua upload len server la: ';
}
return $view;
}
- Tạo VIEW tên /module/Admin/view/admin/upload/multi.phtml với nội dung:
<h1>Upload File</h1>
<?php
//Lấy đối tượng AdminFormUploadForm từ trong VIEW ra
$form = $this->form;
$form->prepare();
?>
<!-- Tạo thẻ <form...> và các giá trị thuộc tính của thẻ này -->
<?php echo $this->form()->openTag($form);?>
<ul>
<li>
<!--In ra giá trị nhãn -->
<span><?php echo $this->formLabel($form->get('picture1')); ?></span>
<!--Tạo phần tử HTML cho việc Upload -->
<?php echo $this->formElement($form->get('picture1')); ?>
</li>
<li>
<!--In ra giá trị nhãn -->
<span><?php echo $this->formLabel($form->get('picture2')); ?></span>
<!--Tạo phần tử HTML cho việc Upload -->
<?php echo $this->formElement($form->get('picture2')); ?>
</li>
<li>
<!--Tạo nút Submit -->
<?php echo $this->formElement($form->get('submit'));?>
</li>
</ul>
<!-- Đóng thẻ </form> -->
<?php echo $this->form()->closeTag() ?>
- Chạy thử URL: localhost:8000/zf2basic/public/admin/upload/multi chúng ta sẽ được giao diện sau:
- Bây giờ chúng ta sẽ xây dựng một hàm upload($files = array(),$file_path = '') có 2 tham số.
o Tham số ‘$files’ là mảng chứa thông tin của tập tin upload
o Tham số ‘$file_path’ là đường dẫn đến thư mục chứa file trên máy chủ
o Khi chạy phương thức này thì nó sẽ trả về cho chúng ta một mảng chứa tên các tập tin chúng ta đã
upload lên máy chủ
- Lúc này chúng ta sẽ mở tập tin /module/Admin/src/Admin/Form/MultiUploadForm.php thêm vào nội
dung sau:
public function upload($files = array(),$file_path = ''){
$fileName = array();
if(count($files) != 0 && $file_path != ''){
$uploadObj = new ZendFileTransferAdapterHttp();
$uploadObj->setDestination($file_path);
foreach ($files as $key => $val){
$uploadObj->receive($key);
$fileName[$key]= $val['name'];
}
}
return $fileName;
}
- Sau khi có phương thức upload() trong tập
tin /module/Admin/src/Admin/Form/MultiUploadForm.php chúng ta có thể sử dụng phương thức này dễ
dàng trong multiAction(). Mở tập
tin /module/Admin/src/Admin/Controller/UploadController.php sửa multiAction() lại thành:
public function multiAction(){
$form = new AdminFormMultiUploadForm();
$view = new ViewModel(array('form'=>$form));
$request = $this->getRequest();
if ($request->isPost()) {
echo 'Tap tin vua upload len server la: ';
$files = $form->upload($request->getFiles()->toArray(),FILES_PATH);
echo "<pre>";
print_r($files);
echo "</pre>";
}
return $view;
}
- Chúng ta refresh URL: localhost:8000/zf2basic/public/admin/upload/multi. Nhấn chọn 2 tập tin bất kỳ
để upload, tiếp theo chúng ta nhấn nút “Send data”, sau đó chúng ta hãy thử kiểm tra thư
mục /public/files đã được upload lên hay chưa.
Download source here: http://www.zend.vn/download/pictures/zend-framework-2/06-zf2-upload-file/06-
zf2-upload-file.zip
Để tìm hiểu kỹ hơn các bạn hãy truy cập:
Website: www.zend.vn
Facebook: facebook.com/zendvngroup
Youtube: youtube.com/user/luutruonghailan

More Related Content

What's hot

The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupKhanhPham
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPelearninglabvn
 
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng webBài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng webMasterCode.vn
 
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webBài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webMasterCode.vn
 
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao KhanhPham
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTMasterCode.vn
 
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng webBài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng webMasterCode.vn
 
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong WordpressTài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong WordpressKhanhPham
 
Cursor & Function trong SQL Server
Cursor & Function trong SQL ServerCursor & Function trong SQL Server
Cursor & Function trong SQL ServerHuy Vũ
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTMasterCode.vn
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webMasterCode.vn
 
tao module joomla 1.5
tao module  joomla 1.5tao module  joomla 1.5
tao module joomla 1.5dvms
 
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản KhanhPham
 

What's hot (20)

Web203 slide 5
Web203   slide 5Web203   slide 5
Web203 slide 5
 
Web301 slide 4
Web301   slide 4Web301   slide 4
Web301 slide 4
 
Web301 slide 2
Web301   slide 2Web301   slide 2
Web301 slide 2
 
The First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress MeetupThe First 2015 Saigon WordPress Meetup
The First 2015 Saigon WordPress Meetup
 
E learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHPE learning lab - Tim hieu Cake PHP
E learning lab - Tim hieu Cake PHP
 
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng webBài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
Bài 6 Tải file và hình ảnh lên website - Xây dựng ứng dụng web
 
Web301 slide 6
Web301   slide 6Web301   slide 6
Web301 slide 6
 
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng webBài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
 
Web301 slide 3
Web301   slide 3Web301   slide 3
Web301 slide 3
 
Web201 slide 6
Web201   slide 6Web201   slide 6
Web201 slide 6
 
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
 
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPTBài 4 Lập trình PHP (phần 2) - Giáo trình FPT
Bài 4 Lập trình PHP (phần 2) - Giáo trình FPT
 
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng webBài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
Bài 5 Chức năng gửi email cho website - Xây dựng ứng dụng web
 
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong WordpressTài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
 
Cursor & Function trong SQL Server
Cursor & Function trong SQL ServerCursor & Function trong SQL Server
Cursor & Function trong SQL Server
 
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPTBài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
Bài 2 Làm quen với môi trường PHP và MySQL (phần 2) - Giáo trình FPT
 
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng webBài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
 
tao module joomla 1.5
tao module  joomla 1.5tao module  joomla 1.5
tao module joomla 1.5
 
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
 
Web201 slide 7
Web201   slide 7Web201   slide 7
Web201 slide 7
 

Similar to Zend Framework 2.0: Upload file và Multi upload files trong ZF2 - Bài 9

All zend
All zendAll zend
All zendkuetli
 
Create easymoduleinphpfox
Create easymoduleinphpfoxCreate easymoduleinphpfox
Create easymoduleinphpfoxEntu Di
 
Lap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcLap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcChe Linh Nguyen
 
Bài 5 Hướng dẫn xây dựng Extension
Bài 5 Hướng dẫn xây dựng ExtensionBài 5 Hướng dẫn xây dựng Extension
Bài 5 Hướng dẫn xây dựng ExtensionMasterCode.vn
 
Devwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork
 
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7dvms
 
Tailieuonline.tk joomla-viet-component
 Tailieuonline.tk joomla-viet-component Tailieuonline.tk joomla-viet-component
Tailieuonline.tk joomla-viet-componentzzbabyloveszz
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Minh Tri Lam
 
My sql part 2 - manager mysql server - backup & restore database
My sql   part 2 - manager mysql server - backup & restore databaseMy sql   part 2 - manager mysql server - backup & restore database
My sql part 2 - manager mysql server - backup & restore databaselaonap166
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Nhat Linh Luong
 
Baocao nguyenanhcuong
Baocao nguyenanhcuongBaocao nguyenanhcuong
Baocao nguyenanhcuongCuong Nguyen
 
Tutoria mvc framework
Tutoria mvc frameworkTutoria mvc framework
Tutoria mvc frameworkXuan Le
 

Similar to Zend Framework 2.0: Upload file và Multi upload files trong ZF2 - Bài 9 (20)

All zend
All zendAll zend
All zend
 
Create easymoduleinphpfox
Create easymoduleinphpfoxCreate easymoduleinphpfox
Create easymoduleinphpfox
 
Giới thiệu Yii Framework 1
Giới thiệu Yii Framework 1Giới thiệu Yii Framework 1
Giới thiệu Yii Framework 1
 
Lap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvcLap trinh-joomla-15-theo-mo-hinh-mvc
Lap trinh-joomla-15-theo-mo-hinh-mvc
 
Bài 5 Hướng dẫn xây dựng Extension
Bài 5 Hướng dẫn xây dựng ExtensionBài 5 Hướng dẫn xây dựng Extension
Bài 5 Hướng dẫn xây dựng Extension
 
Devwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP LaravelDevwork.vn Tài liệu lập trình PHP Laravel
Devwork.vn Tài liệu lập trình PHP Laravel
 
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
 
Tailieuonline.tk joomla-viet-component
 Tailieuonline.tk joomla-viet-component Tailieuonline.tk joomla-viet-component
Tailieuonline.tk joomla-viet-component
 
Joo
JooJoo
Joo
 
Yii
YiiYii
Yii
 
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)Hướng dẫn lập trình với SCSF phần I (smart client software factory)
Hướng dẫn lập trình với SCSF phần I (smart client software factory)
 
Bai th08 php voi csdl
Bai th08 php voi csdlBai th08 php voi csdl
Bai th08 php voi csdl
 
My sql part 2 - manager mysql server - backup & restore database
My sql   part 2 - manager mysql server - backup & restore databaseMy sql   part 2 - manager mysql server - backup & restore database
My sql part 2 - manager mysql server - backup & restore database
 
C5. Model, DataSharing.pdf
C5. Model, DataSharing.pdfC5. Model, DataSharing.pdf
C5. Model, DataSharing.pdf
 
Laravel 5 framework
Laravel 5 frameworkLaravel 5 framework
Laravel 5 framework
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010
 
Baocao nguyenanhcuong
Baocao nguyenanhcuongBaocao nguyenanhcuong
Baocao nguyenanhcuong
 
Tutoria mvc framework
Tutoria mvc frameworkTutoria mvc framework
Tutoria mvc framework
 
Web301 slide 1
Web301   slide 1Web301   slide 1
Web301 slide 1
 
Bài 6: Working with DATA
Bài 6: Working with DATABài 6: Working with DATA
Bài 6: Working with DATA
 

More from KhanhPham

Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtMysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtKhanhPham
 
Giáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với DreamweaverGiáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với DreamweaverKhanhPham
 
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâuTự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâuKhanhPham
 
Học Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend FrameworkHọc Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend FrameworkKhanhPham
 
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)KhanhPham
 
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)KhanhPham
 
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)KhanhPham
 
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)KhanhPham
 
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)KhanhPham
 
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)KhanhPham
 
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)KhanhPham
 
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)KhanhPham
 
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)KhanhPham
 

More from KhanhPham (13)

Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng ViệtMysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
 
Giáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với DreamweaverGiáo trình thiết kế web - Thiết kế web với Dreamweaver
Giáo trình thiết kế web - Thiết kế web với Dreamweaver
 
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâuTự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
Tự học HTML CSS JS - Khóa học HTML CSS JS chuyên sâu
 
Học Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend FrameworkHọc Zend Framework - Khóa học lập trình Zend Framework
Học Zend Framework - Khóa học lập trình Zend Framework
 
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
Tai lieu PHP nang cao - Sử dụng Session và Cookie trong php (CH003 Bài 7)
 
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
Giáo trình PHP căn bản - Lọc dữ liệu với PHP Filter (CH003 Bài 5)
 
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
Giao trinh PHP nang cao - Kỹ thuật đệ qui trong PHP (CH003 Bài 3)
 
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
Giao trinh PHP nang cao - Các hàm xử lý file trong PHP (CH003 Bài 2)
 
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
Giáo trình PHP nâng cao - Biểu thức chính qui trong PHP Regex (CH003 Bài 1)
 
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)Lap trình web PHP - Các hàm xử lý số number trong PHP  (CH002 Bài 3)
Lap trình web PHP - Các hàm xử lý số number trong PHP (CH002 Bài 3)
 
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
Học PHP online - Các hàm xử lý chuỗi trong PHP ( CH002 - Bài 2.1)
 
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
Học PHP cơ bản - Mảng trong PHP ( CH002 - Bài 1.2)
 
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
Học PHP cơ bản - Tìm hiểu về mảng trong PHP ( CH001 - Bài 1.1)
 

Zend Framework 2.0: Upload file và Multi upload files trong ZF2 - Bài 9

  • 1. Upload file và Multi upload files trong ZF2 Xem 'Bài 8 - Thao tác Database trong Zend Framework 2' trước khi thực hành bài này A. Upload File trong Zend Framework 2.0 - Bây giờ chúng ta sẽ tìm hiểu về cách Upload file 1 tập tin hoặc nhiều tập tin cùng một lúctrước khi chúng ta đến các bài kế tiếp về Thêm – Xóa – Sửa dữ liệu - Đầu tiên chúng ta sẽ tạo một CONTROLLER mới có tên /module/Admin/src/Admin/Controller/UploadController.php có nội dung như sau: <?php namespace AdminController; use ZendMvcControllerAbstractActionController; use ZendViewModelViewModel; class UploadController extends AbstractActionController { public function indexAction() { } } - Khi tạo ra một CONTROLLER mới chúng ta sẽ phải khai báo nó với MODULE vì vậy chúng ta mở tập tin /module/Admin/config/module.config.php tìm đoạn mã 'controllers' => array( 'invokables' => array( 'AdminControllerIndex' => 'AdminControllerIndexController', ), ), - Sửa lại thành: 'controllers' => array( 'invokables' => array( 'AdminControllerIndex' => 'AdminControllerIndexController', 'AdminControllerUpload' => 'AdminControllerUploadController' ), ), - Tương ứng với UploadController chúng ta sẽ có một thư mục chứa các VIEW của các ACTION của CONTROLLER này. Chúng ta tạo thư mục /upload trong thư mục /module/Admin/view/admin - Trong UploadController có ACTION tên indexAction vì vậy chúng ta cần tạo một tập tin VIEW cho ACTION này. Tạo tập tin /module/Admin/view/admin/upload/index.phtml có nội dung sau:
  • 2. <h1>Upload File</h1> - Bây giờ chúng ta chạy thử URL: localhost:8000/zf2basic/public/admin/upload/index chúng ta sẽ có giao diện như sau: - Sau khi chúng ta đã tạo xong một ACTION để upload hình ảnh. Chúng ta mở tập tin /public/css/style.css thêm vào một đoạn mã CSS để tạo FORM /*==============#appForm===================*/ #appForm{ width: 700px; border: solid 1px #ccc; } #appForm ul{ list-style: none inside; padding: 5px; margin: 0px; } #appForm li{ padding: 5px; border-bottom: dashed 1px #ccc; } #appForm li span{ font-weight: bold; width: 150px; display: inline-block; } #appForm .txtInput{ font-family: Arial, Helvetica, sans-serif; font-size: 13px; border: 1px solid #ccc;
  • 3. padding: 3px; } .txtSort{ width: 200px; } .txtMedium{ width: 300px; } - Tiếp theo chúng ta tạo thư mục /Form trong thư mục /module/Admin/src/Admin. Thư mục này sẽ chứa các CLASS tạo FORM trong MODULE của chúng ta - Trong thư mục /module/Admin/src/Admin/Form chúng ta tạo 1 tập tin mới có tên UploadForm.php và chúng ta đưa vào nội dung sau: <?php //Khai bao namespace cho class UploadForm namespace AdminForm; //Gọi đến CLASS chứa đối tượng tạo FORM use ZendFormForm; class UploadForm extends Form { public function __construct($name = null) { parent::__construct('appForm'); //Khai báo phương thức sử dụng trong FORM $this->setAttribute('method', 'post'); //Khai báo kiểu dữ liệu được gửi lên server $this->setAttribute('enctype','multipart/form-data'); //Khai báo phần tử textbox 'username' $this->add(array( 'name' => 'picture', 'attributes' => array( 'type' => 'file', 'required' => 'required', 'class' => 'txtInput txtMedium' ), 'options' => array( 'label' => 'File upload:', ), )); //submit $this->add(array( 'name' => 'submit', 'attributes' => array( 'type' => 'submit', 'value' => 'Send data' ), )); } }
  • 4. - Sau khi đã tạo UploadForm lúc này việc của chúng ta đưa FORM vào ACTION để chúng ta truyền ra VIEW. - Mở tập tin /module/Admin/src/Admin/Controller/UploadController.php thêm dòng lệnh sau vào đầu tập tin use AdminFormUploadForm; - Tiếp theo chúng ta sẽ sửa lại nội dung của phương thức indexAction() như sau: <?php namespace AdminController; use ZendMvcControllerAbstractActionController; use ZendViewModelViewModel; use AdminFormUploadForm; class UploadController extends AbstractActionController { public function indexAction() { $form = new UploadForm(); $view = new ViewModel(array('form'=>$form)); return $view; } } - Sau khi đã truyền giá trị từ ACTION ra ngoàiVIEW chúng ta sẽ in ra thông tin để xem - Mở tập tin /module/Admin/view/admin/upload/index.phtml sửa lại nội dung như sau: <h1>Upload File</h1> <?php //Lấy đối tượng AdminFormUploadForm từ trong VIEW ra $form = $this->form; $form->prepare(); echo "<pre>"; print_r($form); echo "</pre>"; ?> - Tiếp theo chúng ta sẽ chạy thử URL: localhost:8000/zf2basic/public/admin/upload/index chúng ta sẽ có giao diện sau
  • 5. - Nếu thấy giao diện xuất hiện như trên điều này chứng tỏ đối tượng UploadForm đã hoạt động được. Bây giờ chúng ta sẽ tiến hành việc chuyển đối tượng UploadForm thành mã HTML. - Mở tập tin /module/Admin/view/admin/upload/index.phtml sửa lại nội dung như sau: <h1>Upload File</h1> <?php //Lấy đối tượng AdminFormUploadForm từ trong VIEW ra $form = $this->form; $form->prepare(); ?> <!-- Tạo thẻ <form...> và các giá trị thuộc tính của thẻ này --> <?php echo $this->form()->openTag($form);?> <ul> <li> <!--In ra giá trị nhãn --> <span><?php echo $this->formLabel($form->get('picture')); ?></span> <!--Tạo phần tử HTML cho việc Upload --> <?php echo $this->formElement($form->get('picture')); ?> </li> <li> <!--Tạo nút Submit --> <?php echo $this->formElement($form->get('submit'));?> </li> </ul> <!-- Đóng thẻ </form> --> <?php echo $this->form()->closeTag() ?> - Chúng ta sẽ chạy thử URL: localhost:8000/zf2basic/public/admin/upload/index
  • 6. - Các bạn nhìn thấy lỗi xuất hiện. Việc xuất hiện lỗi như thế này rất khó sửa vì trước khi thêm mã mới vào chúng ta đã in ra được đối tượng UploadForm mà không có lỗi gì cả. Nhưng sau khi thêm lại xuất hiện lỗi. Đoạn mã của chúng ta thêm viết đúng hoàn toàn nên chắc chắn không phải do đoạn mã trên gây ra. - Trong đối tượng Zend/Form/Form có liên kết đến một đối tượng đó là ZendI18nTranslatorTranslator để hỗ trợ cho việc chuyển đổi ngôn ngữ trên giao diện ứng dụng. Vì vậy để sửa được lỗi này chúng ta cần khai báo đối tượng ZendI18nTranslatorTranslator trong tập tin module.config.php của MODULE này . Chúng ta thực hiện như sau, mở tập /module/Admin/config/module.config.php thêm một phần tử mới vào mảng cấu hình: 'translator' => array( 'locale' => 'en_US', 'translation_file_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __DIR__ . '/../language', 'pattern' => '%s.mo', ), ), ), - Lúc này toàn nội dung tập tin /module/Admin/config/module.config.php sẽ như sau: <?php return array( //Bat buoc phai co khong thi se co loi //Phần này giúp 'controllers' => array( 'invokables' => array( 'AdminControllerIndex' => 'AdminControllerIndexController', 'AdminControllerUpload' => 'AdminControllerUploadController' ), ), 'router' => array( 'routes' => array( 'admin' => array(
  • 7. 'type' => 'segment', 'options' => array( //'route' => '/album[/:controller][/:action][/][:id]', 'route' => '/admin[/][:controller][/][:action][/][id/:id]', 'constraints' => array( 'controller' => '[a-zA-Z][a-zA-Z0-9_-]*', 'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 'id' => '[0-9]+', ), 'defaults' => array( '__NAMESPACE__' => 'AdminController',//Khong co namespace thi se xay ra loi 'controller' => 'AdminControllerIndex', 'action' => 'index', ), ), ), ), ), //Bat buoc phai co thì mới load duoc View 'view_manager' => array( /* 'template_map' => array( 'layout/layout' => __DIR__ . '/../view/layout/layout.phtml', ), */ 'template_path_stack' => array( 'admin' => __DIR__ . '/../view' ), ), 'translator' => array( 'locale' => 'en_US', 'translation_file_patterns' => array( array( 'type' => 'gettext', 'base_dir' => __DIR__ . '/../language', 'pattern' => '%s.mo', ), ), ), ); - Sau khi thêm đoạn mã khai báo đối tượng ZendI18nTranslatorTranslator chúng ta thử refresh lại URLlocalhost:8000/zf2basic/public/admin/upload/index
  • 8. - Bây giờ chúng ta tạo một thư mục mới tên /files trong thư mục /public để chúng ta upload hình ảnh lên - Tiếp theo chúng ta sẽ khai báo thêm một hằng số để lưu trữ đường dẫn đến thư mục upload files trong tập tin /public/define.php. Mở tập tin /public/define.php thêm vào dòng lệnh sau: define('FILES_PATH' , realpath(PUBLIC_PATH . '/files')); - Bây giờ chúng ta chỉnh lại mã của indexAction() để upload được tập tin vào thư mục /public/files public function indexAction() { $form = new UploadForm(); $view = new ViewModel(array('form'=>$form)); $request = $this->getRequest(); if ($request->isPost()) { $files = $request->getFiles()->toArray(); $fileName = $files['picture']['name']; $uploadObj = new ZendFileTransferAdapterHttp(); $uploadObj->setDestination(FILES_PATH); if($uploadObj->receive($fileName)) { echo "<br>Upload thanh cong"; } } return $view; } - Chúng ta refresh URL: localhost:8000/zf2basic/public/admin/upload/index. Nhấn chọn một tập tin bất
  • 9. kỳ để upload, tiếp theo chúng ta nhấn nút “Send data”, sau đó chúng ta hãy thử kiểm tra thư mục /public/files đã được upload lên hay chưa B. Tạo hàm upload file cho ứng dụng - Thực sự trong phần A chúng ta chúng ta đã upload được file nhưng để mã trong CONTROLLER gọn hơn thì chúng ta nên tối ưu lại một chút. - Bây giờ chúng ta sẽ tạo ra một ACTION mới có tên abcAction() trong tập tin /module/Admin/src/Admin/Controller/UploadController.php và abcAction() sẽ có nội dung như sau public function abcAction(){ $form = new UploadForm(); $view = new ViewModel(array('form'=>$form)); $request = $this->getRequest(); if ($request->isPost()) { echo "du lieu dang duoc gui qua"; } return $view; } - Sau khi tạo ACTION chúng ta sẽ tạo VIEW và VIEW của abcAction() sẽ có nội dung giống với indexAction(). Tạo tập tin /module/Admin/view/admin/upload/abc.phtml với nội dung sau: <h1>Upload File</h1> <?php //Lấy đối tượng AdminFormUploadForm từ trong VIEW ra $form = $this->form; $form->prepare(); ?> <!-- Tạo thẻ <form...> và các giá trị thuộc tính của thẻ này --> <?php echo $this->form()->openTag($form);?> <ul>
  • 10. <li> <!--In ra giá trị nhãn --> <span><?php echo $this->formLabel($form->get('picture')); ?></span> <!--Tạo phần tử HTML cho việc Upload --> <?php echo $this->formElement($form->get('picture')); ?> </li> <li> <!--Tạo nút Submit --> <?php echo $this->formElement($form->get('submit'));?> </li> </ul> <!-- Đóng thẻ </form> --> <?php echo $this->form()->closeTag() ?> - Bây giờ chúng ta sẽ xây dựng một hàm upload($files = array(),$file_path = '') có 2 tham số. o Tham số ‘$files’ là mảng chứa thông tin của tập tin upload o Tham số ‘$file_path’ là đường dẫn đến thư mục chứa file trên máy chủ o Khi chạy phương thức này thì nó sẽ trả về cho chúng ta tên tập tin chúng ta đã upload lên máy chủ - Lúc này chúng ta sẽ mở tập tin /module/Admin/src/Admin/Form/UploadForm.php thêm vào nội dung sau: public function upload($files = array(),$file_path = ''){ $fileName = ''; if(count($files) != 0 && $file_path != ''){ $fileName = $files['picture']['name']; $uploadObj = new ZendFileTransferAdapterHttp(); $uploadObj->setDestination($file_path); $uploadObj->receive($fileName)); } return $fileName; } - Sau khi có phương thức upload() trong tập tin /module/Admin/src/Admin/Form/UploadForm.php chúng ta có thể sử dụng phương thức này dễ dàng trong abcAction(). Mở tập tin /module/Admin/src/Admin/Controller/UploadController.php sửa abcAction() lại thành: public function abcAction(){ $form = new UploadForm(); $view = new ViewModel(array('form'=>$form)); $request = $this->getRequest(); if ($request->isPost()) { echo 'Tap tin vua upload len server la: '; echo $form->upload($request->getFiles()->toArray(),FILES_PATH); } return $view; }
  • 11. - Chúng ta refresh URL: localhost:8000/zf2basic/public/admin/upload/index. Nhấn chọn một tập tin bất kỳ để upload, tiếp theo chúng ta nhấn nút “Send data”, sau đó chúng ta hãy thử kiểm tra thư mục /public/files đã được upload lên hay chưa C. Multi upload trong Zend Framework 2.0 - Bây giờ chúng ta sẽ qua phần ví dụ upload một lúc nhiều file. Đầu tiên chúng ta sẽ tạo tập tin /module/Admin/src/Admin/Form/MultiUploadForm.php với nội dung như sau: <?php //Khai bao namespace cho class MultiUploadForm namespace AdminForm; //Gọi đến CLASS chứa đối tượng tạo FORM use ZendFormForm; class MultiUploadForm extends Form { public function __construct($name = null) { parent::__construct('appForm'); //Khai báo phương thức sử dụng trong FORM $this->setAttribute('method', 'post'); //Khai báo kiểu dữ liệu được gửi lên server $this->setAttribute('enctype','multipart/form-data'); //Khai báo phần tử textbox 'username' $this->add(array( 'name' => 'picture1', 'attributes' => array( 'type' => 'file', 'required' => 'required', 'class' => 'txtInput txtMedium' ), 'options' => array( 'label' => 'File upload 1:', ), )); $this->add(array( 'name' => 'picture2', 'attributes' => array( 'type' => 'file', 'required' => 'required', 'class' => 'txtInput txtMedium' ), 'options' => array( 'label' => 'File upload 2:', ), )); $this->add(array( 'name' => 'submit', 'attributes' => array( 'type' => 'submit',
  • 12. 'value' => 'Send data' ), )); } } - Mở tập /module/Admin/src/Admin/Controller/UploadController.php thêm vào multiAction() với nội dung public function multiAction(){ $form = new AdminFormMultiUploadForm(); $view = new ViewModel(array('form'=>$form)); $request = $this->getRequest(); if ($request->isPost()) { echo 'Tap tin vua upload len server la: '; } return $view; } - Tạo VIEW tên /module/Admin/view/admin/upload/multi.phtml với nội dung: <h1>Upload File</h1> <?php //Lấy đối tượng AdminFormUploadForm từ trong VIEW ra $form = $this->form; $form->prepare(); ?> <!-- Tạo thẻ <form...> và các giá trị thuộc tính của thẻ này --> <?php echo $this->form()->openTag($form);?> <ul> <li> <!--In ra giá trị nhãn --> <span><?php echo $this->formLabel($form->get('picture1')); ?></span> <!--Tạo phần tử HTML cho việc Upload --> <?php echo $this->formElement($form->get('picture1')); ?> </li> <li> <!--In ra giá trị nhãn --> <span><?php echo $this->formLabel($form->get('picture2')); ?></span> <!--Tạo phần tử HTML cho việc Upload --> <?php echo $this->formElement($form->get('picture2')); ?> </li> <li> <!--Tạo nút Submit --> <?php echo $this->formElement($form->get('submit'));?> </li> </ul> <!-- Đóng thẻ </form> -->
  • 13. <?php echo $this->form()->closeTag() ?> - Chạy thử URL: localhost:8000/zf2basic/public/admin/upload/multi chúng ta sẽ được giao diện sau: - Bây giờ chúng ta sẽ xây dựng một hàm upload($files = array(),$file_path = '') có 2 tham số. o Tham số ‘$files’ là mảng chứa thông tin của tập tin upload o Tham số ‘$file_path’ là đường dẫn đến thư mục chứa file trên máy chủ o Khi chạy phương thức này thì nó sẽ trả về cho chúng ta một mảng chứa tên các tập tin chúng ta đã upload lên máy chủ - Lúc này chúng ta sẽ mở tập tin /module/Admin/src/Admin/Form/MultiUploadForm.php thêm vào nội dung sau: public function upload($files = array(),$file_path = ''){ $fileName = array(); if(count($files) != 0 && $file_path != ''){ $uploadObj = new ZendFileTransferAdapterHttp(); $uploadObj->setDestination($file_path); foreach ($files as $key => $val){ $uploadObj->receive($key); $fileName[$key]= $val['name']; } } return $fileName; } - Sau khi có phương thức upload() trong tập tin /module/Admin/src/Admin/Form/MultiUploadForm.php chúng ta có thể sử dụng phương thức này dễ dàng trong multiAction(). Mở tập tin /module/Admin/src/Admin/Controller/UploadController.php sửa multiAction() lại thành:
  • 14. public function multiAction(){ $form = new AdminFormMultiUploadForm(); $view = new ViewModel(array('form'=>$form)); $request = $this->getRequest(); if ($request->isPost()) { echo 'Tap tin vua upload len server la: '; $files = $form->upload($request->getFiles()->toArray(),FILES_PATH); echo "<pre>"; print_r($files); echo "</pre>"; } return $view; } - Chúng ta refresh URL: localhost:8000/zf2basic/public/admin/upload/multi. Nhấn chọn 2 tập tin bất kỳ để upload, tiếp theo chúng ta nhấn nút “Send data”, sau đó chúng ta hãy thử kiểm tra thư mục /public/files đã được upload lên hay chưa. Download source here: http://www.zend.vn/download/pictures/zend-framework-2/06-zf2-upload-file/06- zf2-upload-file.zip Để tìm hiểu kỹ hơn các bạn hãy truy cập: Website: www.zend.vn Facebook: facebook.com/zendvngroup Youtube: youtube.com/user/luutruonghailan