Thứ Tư, 28 tháng 11, 2018

FuelPHP - Tải tệp lên

Tải lên tệp là một trong những tính năng được sử dụng phổ biến nhất trong lập trình biểu mẫu. PHP cung cấp một lớp đặc biệt, Tải lên để xử lý việc tải lên các tệp. Chúng ta hãy tìm hiểu cách tải lên một tệp bằng cách sử dụng lớp Tải lên trong chương này.
Cấu hình

Tải lên lớp học có thể được cấu hình bằng cách sử dụng tập tin cấu hình riêng biệt, nhiên liệu / app / config / upload.php . Các mục cấu hình quan trọng như sau:

Học lập trình PHP
max_size - Đặt kích thước tối đa của tệp được tải lên. “0” đề cập kích thước tải lên không giới hạn


ext_whitelist - Đặt tiện ích mở rộng tệp được phép


ext_blacklist - Đặt tiện ích tệp không được phép


type_whitelist - Đặt các loại tệp được cho phép. Ví dụ: “văn bản” cho loại mime “text / plain”


type_blacklist - Đặt các loại tệp không được phép


mime_whitelist - Đặt các loại tệp mime được phép. Ví dụ: “text / plain”


mime_blacklist - Đặt loại tệp mime không được phép


prefix - String thành tiền tố trong tên tệp trong khi lưu tệp được tải lên máy chủ


Học lập trình PHP hậu tố - Chuỗi đến hậu tố trong tên tệp trong khi lưu tệp được tải lên máy chủ


tiện ích mở rộng - Mở rộng tệp được tải lên sẽ được đặt


create_path - Cho dù tạo đường dẫn tệp, nếu không có


ghi đè - Cho dù ghi đè tệp hiện có trong khi lưu tệp đã tải lên


auto_rename - Có đổi tên tệp bằng cách thêm số thứ tự trong khi lưu tệp đã tải lên hay không


randomize - Cho dù tạo tên 32 ký tự ngẫu nhiên để lưu tệp đã tải lên
Phương thức tải lên

Lớp tải lên cung cấp các tùy chọn để xử lý và lưu tệp do người dùng tải lên. Mỗi tệp được xử lý (trước khi lưu) sẽ có thông tin sau trong mảng kết quả.


field - Tên của trường biểu mẫu


name - Tên của tệp được tải lên


type - Loại tệp được định nghĩa bởi trình duyệt


mimetype - Loại tệp được định nghĩa bởi lớp Tải lên


tệp - Tên đủ điều kiện của vị trí tạm thời của tệp được tải lên


tên tệp - Tên tệp của tệp được tải lên


tiện ích mở rộng - Mở rộng tệp được tải lên


size - Kích thước của tệp được tải lên theo byte


lỗi - Mảng lỗi có mã lỗi và tin nhắn


lỗi - Có hay không đặt lỗi mảng với lý do tại sao tải lên không thành công (trong trường hợp không tải lên được)

Một khi các tập tin được lưu trong máy chủ, mảng kết quả sẽ có các thông tin sau đây.


saved_to - Đường dẫn đầy đủ điều kiện nơi tệp được tải lên đã được lưu


saved_as - Tên của tệp đã được lưu

lỗi - Mảng lỗi được cập nhật
Bây giờ, chúng ta hãy xem phương thức Upload class.
is_valid

is_valid trả về true, nếu bất kỳ tệp hợp lệ nào được tải lên bởi người dùng.
// do we have any uploaded files to save? 
if (Upload::is_valid()) { 
   // process  
} 

get_files

get_files trả về tất cả các tệp được tải lên dưới dạng mảng đa chiều. Nếu chỉ mục / tên của đầu vào tệp của biểu mẫu được chỉ định, thì nó sẽ trả về tệp được tải lên có liên quan đến đầu vào tệp được chỉ định.
foreach(Upload::get_files() as $file) { 
   // do something with the file info 
}  
if ( Upload::get_files(0)) { 
   // do something 
}

get_errors

get_errors trả về một mảng lỗi, nếu có lỗi tải lên một hoặc nhiều tệp. Nếu chỉ mục / tên của tên đầu vào tệp của biểu mẫu được chỉ định, thì nó sẽ trả về lỗi liên quan đến đầu vào tệp được chỉ định.
foreach(Upload::get_errors() as $file) { 
   // do something with the file info 
}  
if (Upload::get_errors('myimage')) { 
   // do something 
} 

Quá trình

Học lập trình PHP quy trình đề cập đến quá trình thu thập thông tin thực tế về tệp được tải lên. Chúng tôi có thể cung cấp một cấu hình tùy chỉnh mới bằng cách sử dụng mảng.

Nếu không có cấu hình nào được chỉ định, thì nó sẽ sử dụng cấu hình được định nghĩa trong fuel / app / config / upload.php
Upload::process (array( 
   'auto_rename' => false, 
   'overwrite'   => true 
));

tiết kiệm

tiết kiệm đề cập đến quá trình thực tế của việc lưu tất cả các tập tin xác nhận ở một vị trí thích hợp. Chúng tôi có thể chỉ định chỉ mục để lưu chỉ mục nhập cụ thể đó.
Upload::save();
Upload::save(0);
Upload::save(0, 3); 

Ví dụ làm việc

Hãy để chúng tôi tạo một bộ điều khiển mới, Controller_Upload trong mẫu nhân viên của chúng tôi để kiểm tra chức năng tải lên.

Bước 1 - Tạo một tập tin, nhiên liệu / ứng dụng / lớp / điều khiển / upload.php . Tạo bộ điều khiển tải lên.
<?php 
   class Controller_Upload extends Controller { 
   }
Bước 2 - Tạo một hành động get_upload mới.
<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      } 
   }
Bước 3 - Tạo một khung nhìn mới cho hành động được tạo ra.
<!DOCTYPE html> 
<html> 
   <body> 
   
      <form action = "/upload/index" method = "post" enctype = "multipart/form-data"> 
         Select image to upload: 
         <input type = "file" name = "fileToUpload" id = "fileToUpload"> 
         <input type = "submit" value = "Upload Image" name = "submit"> 
      </form>  
      
   </body> 
</html> 
Bước 4 - Tạo một post_action hành động mới để xử lý tệp được tải lên.
<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      }  
      public function post_index(){ 
         $config = array( 
            'path' => DOCROOT.'files', 
            'randomize' => true, 
            'ext_whitelist' => array('img', 'jpg', 'jpeg', 'gif', 'png'), 
         );  
         Upload::process($config);  
         // if there are any valid files 
         
         if (Upload::is_valid()) { 
            Upload::save(); 
            echo "success"; 
         } else { 
            // and process any errors 
            foreach (Upload::get_errors() as $file) { 
               echo var_dump($file); 
            } 
         } 
      } 
   }      
Học lập trình PHP. Cuối cùng, chạy ứng dụng bằng cách yêu cầu url, http: // localhost: 8080 / upload / index và thử tải lên tệp.

Thứ Ba, 27 tháng 11, 2018

FuelPHP - Lập trình biểu mẫu nâng cao

Học lập trình PHP cung cấp một lập trình biểu mẫu nâng cao thông qua các lớp Fieldset và Fieldset_Field. Fieldset cung cấp một cách hướng đối tượng để tạo biểu mẫu.

Nó có hỗ trợ hoàn chỉnh cho các mô hình. Nó cũng hỗ trợ sẵn cho việc xác nhận phía máy khách và phía máy chủ. 

Học lập trình PHP
Để tạo một biểu mẫu chính thức, nó là đủ để tạo ra một mô hình với thiết lập hợp lệ và mẫu. Chúng ta hãy tìm hiểu về lớp Fieldset và cách tạo một biểu mẫu bằng cách sử dụng nó trong chương này.

Fieldset

Fieldset là một tập hợp các đối tượng Fieldset_Field . Fieldset_Field xác định mục nhập riêng lẻ của một biểu mẫu như firstname, lastname, vv cùng với các xác nhận hợp lệ. Fieldset class có các phương thức để thêm / sửa / xóa các trường.

Nó có các tùy chọn để xác định các trường được xác định trong một mô hình và tạo ra các trường từ mô hình đã cho.

Fieldset sử dụng các lớp Form và Validation trong nền để thực hiện công việc thực. Chúng ta hãy xem một số phương pháp quan trọng của lớp Fieldset.

làm giả

forge tạo một thể hiện Fieldset mới. Nó có hai tham số sau đây

$ name - định danh cho fieldset

Mảng cấu hình $ config . Các tùy chọn có thể là validation_instancevà form_instance. validation_instance có thể có đối tượng Validationvà form_instance có thể có đối tượng Form.
$employee_form = Fieldset::forge('employee');
ví dụ

Ví dụ trả về cá thể Fieldset đã được tạo trước đó bằng mã định danh.
$employee_form = Fieldset::instance('employee');

get_name

Nhận định danh của thể hiện fieldset.
$employee_form = Fieldset::forge('employee'); 
$name = $employee_form->get_name();

thêm và

Học lập trình PHP add tạo một thể hiện Fieldset_Field mới và thêm nó vào fieldset hiện tại. Nó chứa bốn thông số sau,

name - tên của trường

$ label - nhãn cho trường

$ attribute - Thuộc tính thẻ HTML

$ quy tắc - quy tắc xác thực
$employee_field = $employee_form-> add (
   'employee_lastname', 
   'Lastname', 
   array ('class' => 'pretty_input')
);  

// with validation rules 
$employee_form->add ( 
   'email', 'E-mail', 
   array('type' => 'email', 'class' => 'pretty_input'), 
   array('required', 'valid_email') 
);

Thêm trước

add_before tương tự như add, ngoại trừ nó có thêm một tham số để xác định trường trước khi trường mới được tạo sẽ được thêm vào.
$employee_form->add_before (
   'employee_firstname', 
   'Firstname', 
   array ('class' => 'pretty_input'), 
   array(), 
   'employee_lastname'
);

xóa bỏ

xóa xóa trường đã chỉ định khỏi fieldset.
$employee_form->delete('employee_firstname');

cánh đồng

trường nhận được tất cả các trường hoặc trường được chỉ định từ fieldset.
$fields = $employee_form->field(); 
$lastname_field = $employee_form->field('employee_lastname'); 

xây dựng

build là bí danh cho $ this-> form () -> build () . Tạo đánh dấu HTML của biểu mẫu.
$employee_form->build(Uri::create('employee/add'));

cho phép

bật lại cho phép trường đã bị vô hiệu hóa trước đó.
$employee_form->enable('employee_firstname');

vô hiệu hóa

vô hiệu hóa cho phép vô hiệu hóa một trường trong fieldset đang được xây dựng.
$employee_form->disable('employee_firstname');

hình thức

form trả về cá thể Form của fieldset hiện tại.
$form = employee_form->form();
add_model

Học lập trình PHP add_model thêm trường của mô hình vào fieldset. Nó có ba thông số sau,

$ class - tên lớp

$ instance - instance của lớp để điền vào các trường có giá trị

$ method - tên của phương thức trong lớp. Phương thức này được sử dụng để thêm các trường vào fieldset. Orm \ Model có phương thức cần thiết. Tên phương thức mặc định là set_form_fields.
$employee_form = Fieldset::forge('employee'); 
$employee_form->add_model('Model_Employee');

cư trú

điền tập hợp giá trị ban đầu của các trường trong fieldset sử dụng cá thể mô hình.
$emp = new Model_Employee(); 
$emp->name = "Jon"; 
$employee_form->populate($emp);

phục hồi

repopulate giống như điền, ngoại trừ nó repopulates các lĩnh vực trong fieldset.

xác thực

xác nhận hợp lệ nhận được cá thể xác thực của fieldset hiện tại.
$validation = $employee_form->validation();

đã xác thực

Học lập trình PHP Bí danh cho $ this-> validation () -> validated ().

đầu vào

Bí danh cho $ this-> validation () -> input ().

lỗi

Bí danh cho $ this-> validation () -> error ().

show_errors

Bí danh cho $ this-> validation () -> show_errors ().

Ví dụ làm việc

Hãy tạo một biểu mẫu nâng cao để thêm nhân viên mới vào ứng dụng nhân viên mẫu của chúng ta bằng cách sử dụng lớp Fieldset.

Cập nhật mô hình

Cập nhật mô hình nhân viên với các quy tắc xác nhận cần thiết và thêm một người quan sát xác nhận như sau.
<?php  
   class Model_Employee extends Orm\Model { 
      protected static $_connection = 'production'; 
      protected static $_table_name = 'employee'; 
      protected static $_primary_key = array('id'); 
      
      protected static $_properties = array ( 
         'id',  
         'name' => array ( 
            'data_type' => 'varchar',
            'label' => 'Employee Name', 
            'validation' => array ( 
               'required',  
               'min_length' => array(3),  
               'max_length' => array(80) 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'age' => array ( 
            'data_type' => 'int', 
            'label' => 'Employee Age', 
            'validation' => array ( 
               'required',  
            ), 
            'form' => array ('type' => 'text' ), 
         ), 
      );  
      
      // Just add the Observer, and define the required event 
      protected static $_observers = array('Orm\\Observer_Validation' => array ( 
         'events' => array('before_save'))); 
   } 
Học lập trình PHP Ở đây, chúng tôi đã xác định các quy tắc xác nhận cho các trường tên và tuổi và thêm một người quan sát mới để thực hiện xác thực phía máy chủ trước khi lưu mô hình vào cơ sở dữ liệu.

Quy tắc xác thực tương tự sẽ tạo các thuộc tính xác thực đầu vào cần thiết cũng như trong biểu mẫu.

Tạo biểu mẫu

Tạo hành động mới, action_advancedform trong bộ điều khiển nhân viên như sau.
public function action_advancedform() { 
   
   // create a new fieldset and add employee model
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit'));  
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));  
   
   // set form in data 
   $data = array(); 
   $data['form'] = $formHtml;  
   return Response::forge(View::forge('employee/advancedform', $data, false)); 
}   

Học lập trình PHP Ở đây, chúng ta đã tạo biểu mẫu bằng cách sử dụng fieldset và gửi biểu mẫu tới khung nhìn.

Tiếp theo, thêm chế độ xem cho hành động, nhiên liệu / ứng dụng / lượt xem / nhân viên / advancedform.php như sau.
<!DOCTYPE html> 
<html lang = "en"> 
   
   <head> 
      <title>Employee :: add page</title> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 
      <?php echo Asset::css('bootstrap.css'); ?> 
      
      <style>  
         table { 
            width: 90%; 
         }  
         table tr { 
            width: 90% 
         }
         table tr td { 
            width: 50% 
         }  
         input[type = text], select { 
            width: 100%; 
            padding: 12px 20px; 
            margin: 8px 0; 
            display: inline-block; 
            border: 1px solid #ccc; 
            border-radius: 4px; 
            box-sizing: border-box; 
         }  
         input[type = submit] { 
            width: 100%; 
            background-color: #3c3c3c; 
            color: white; 
            padding: 14px 20px; 
            margin: 8px 0; 
            border: none; 
            border-radius: 4px; 
            cursor: pointer; 
         }  
         div { 
            border-radius: 5px; 
            background-color: #f2f2f2; 
            padding: 20px; 
         } 
      </style> 
   </head> 
   
   <body> 
      <div class = "container"> 
         <?php
            if(isset($errors)) { 
               echo $errors; 
            } 
            echo $form; 
         ?> 
      </div> 
   </body> 
   
</html>

Bây giờ, yêu cầu trang http: // localhost: 8080 / employee / add sẽ hiển thị biểu mẫu sau.

Biểu mẫu quy trình

Học lập trình PHP Cập nhật phương thức hành động, action_advancedform để xử lý biểu mẫu và thêm dữ liệu nhân viên do người dùng nhập vào cơ sở dữ liệu trong trình điều khiển nhân viên như sau.
public function action_advancedform() { 
   
   // create a new fieldset and add employee model 
   $fieldset = Fieldset::forge('employee')->add_model('Model_Employee');  
   
   // get form from fieldset 
   $form = $fieldset->form();  
   
   // add submit button to the form 
   $form->add('Submit', '', array('type' => 'submit', 'value' => 'Submit')); 
   
   // build the form  and set the current page as action  
   $formHtml = $fieldset->build(Uri::create('employee/advancedform'));  
   
   if (Input::param() != array()) { 
      try { 
         $article = Model_Employee::forge(); 
         $article->name = Input::param('name'); 
         $article->url = Input::param('age'); 
         $article->save(); 
         Response::redirect('employee/list'); 
      
      } 
      catch (Orm\ValidationFailed $e) { 
         $view = View::forge('employee/advancedform'); 
         $view->set('form', $formHtml, false); 
         $view->set('errors', $e->getMessage(), false); 
      } 
   } 
   
   return Response::forge($view); 
}
Học lập trình PHP. Ở đây, chúng tôi đã được chuyển hướng đến trang danh sách nhân viên, khi người dùng nhập dữ liệu được xác thực và lưu vào cơ sở dữ liệu. Nếu không, chúng tôi sẽ hiển thị lại biểu mẫu.

Tạo biểu mẫu

Bây giờ, yêu cầu URL, http: // localhost: 8080 / employee / add và nhập một số dữ liệu nhân viên và gửi biểu mẫu. Nếu dữ liệu không được cung cấp, thì biểu mẫu sẽ nhắc người dùng nhập dữ liệu như được hiển thị trong ảnh chụp màn hình sau đây.

Nếu người dùng bỏ qua xác thực phía máy khách, thì máy chủ sẽ xác thực biểu mẫu và hiển thị lỗi như được hiển thị trong ảnh chụp màn hình sau đây.

Nếu dữ liệu được thông qua xác thực phía máy khách và phía máy chủ, thì dữ liệu nhân viên sẽ được lưu vào cơ sở dữ liệu và trang được chuyển hướng đến trang danh sách.

lập trình PHP cho các nhà phát triển PERL

Chương này sẽ liệt kê những điểm tương đồng và khác biệt chính giữa PHP và PERL. Điều này sẽ giúp các nhà phát triển PERL hiểu PHP rất nhanh...