Thứ Năm, 28 tháng 6, 2018

PHP - 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ủ. Để 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ào

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

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

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'))); 
   } 

Ở đâ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)); 
}   
Ở đâ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.

NIIT-ICT
ảnh minh họa

Biểu mẫu quy trình

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); 
}
Ở đâ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.

NIIT-ICT
ảnh minh họa

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.

NIIT-ICT
ảnh minh họa

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.

Thứ Tư, 27 tháng 6, 2018

PHP - Lập trình biểu mẫu

PHP cung cấp ba lớp, Form Fieldset ,, và Input ,, để thực hiện lập trình biểu mẫu.

Lớp biểu mẫu cung cấp tùy chọn để tạo tất cả các phần tử biểu mẫu HTML.

Fieldset class cung cấp một tùy chọn để tạo phần tử html thông qua các phương thức mức cao hơn, tích hợp các mô hình và xác nhận hợp lệ.

Lớp đầu vào cung cấp một tùy chọn để phân tích cú pháp dữ liệu được gửi qua các biểu mẫu html cũng như các tham số http, các biến máy chủ và các tác nhân người dùng.

Trong chương này, chúng ta hãy học lập trình PHP Form trong PHP.

Hình thức

Như đã thảo luận ở trên, lớp Form cung cấp các phương thức để tạo các phần tử biểu mẫu html và các phương thức quan trọng như sau:

mở()

open () được sử dụng để tạo một biểu mẫu mới. Nó cung cấp hai tham số sau đây -

$ attribute - thuộc tính của thẻ biểu mẫu dưới dạng mảng hoặc chỉ là URL hành động dưới dạng chuỗi.

$ hidden - mảng của tên trường ẩn và giá trị của chúng.
echo Form::open('/employee/add'); 
echo Form::open(array('action' => '/employee/add', 'method' => 'post'));

gần()

close () chỉ cần đóng biểu mẫu.
echo Form::close();

đầu vào()

input () tạo phần tử đầu vào html. Nó có ba thông số sau,

$ field - tên của phần tử đầu vào

$ value - giá trị của phần tử đầu vào

$ attributes - thuộc tính của phần tử đầu vào như mảng
echo Form::input('name', 'jon', array('style' => 'border: 20px;'));

yếu tố nhãn

nhãn tạo phần tử nhãn html. Nó có ba thông số sau,

$ label - nhãn để hiển thị

Id phần tử biểu mẫu id được liên kết

$ thuộc tính - thuộc tính của phần tử nhãn làm mảng
echo Form::label('Employee Name', 'employee_name');

ẩn

ẩn tương tự như phương thức nhập, ngoại trừ nó đặt loại phần tử đầu vào thành ẩn.

mật khẩu

mật khẩu tương tự như phương thức nhập, ngoại trừ nó đặt loại phần tử đầu vào thành mật khẩu.

radio

radio tương tự như phương thức nhập, ngoại trừ nó đặt loại phần tử đầu vào thành radio. Nó có bốn thông số sau,

$ field - tên của phần tử đầu vào

$ value - giá trị của phần tử đầu vào

$ checked - cho dù mục được kiểm tra hay không (đúng / sai)

$ attributes - thuộc tính của phần tử đầu vào như mảng
echo Form::label('Male', 'gender'); 
echo Form::radio('gender', 'Male', true); 
echo Form::label('Female', 'gender'); 
echo Form::radio('gender', 'Female');

hộp kiểm

hộp kiểm tương tự như phương thức nhập, ngoại trừ nó đặt loại phần tử đầu vào thành hộp kiểm. Nó có bốn thông số sau,

$ field - tên của phần tử đầu vào

$ value - giá trị của phần tử đầu vào

$ checked - cho dù mục được kiểm tra hay không (đúng / sai)

$ attributes - thuộc tính của phần tử đầu vào như mảng
echo Form::label('Male', 'gender'); 
echo Form::checkbox('gender', 'Male', true);
echo Form::label('Female', 'gender'); 
echo Form::checkbox('gender', 'Female');

tập tin

tệp tương tự như phương thức nhập, ngoại trừ nó đặt loại phần tử đầu vào thành tệp.

textarea

textarea tạo phần tử textarea html. Nó có ba thông số sau,

$ field - tên của phần tử textarea

$ value - giá trị của phần tử textarea

$ attribute - thuộc tính của phần tử textarea dưới dạng mảng
echo Form::textarea ('description', 'original data (value)', array ('rows' => 6, 
      'cols' => 8)); 

lựa chọn

chọn tạo phần tử chọn HTML. Nó có bốn tham số sau đây -

$ field - tên của phần tử select

$ values - giá trị lựa chọn ban đầu

$ tùy chọn - tùy chọn dưới dạng mảng. Các tùy chọn có thể được nhóm lại bằng cách sử dụng mảng lồng nhau

$ attributes - thuộc tính của phần tử đầu vào như mảng
echo Form::select ( 
   'country',  
   'none',  
   array ( 
      'none'  => 'None', 
      'asia'  => array ( 
         'in' > 'India', 
         'cn' => 'China' 
      ), 
      
      'us' => 'United States' 
   ) 
);

Gửi đi

gửi tương tự như phương thức nhập, ngoại trừ nó đặt loại phần tử đầu vào để gửi.

nút

nút tạo phần tử nút html. Nó có ba thông số sau,

$ field - tên của phần tử nút

$ value - giá trị của phần tử nút

$ thuộc tính - thuộc tính của phần tử nút dưới dạng mảng
echo Form::button('emp_submit', 'Submit');

cài lại

thiết lập lại tương tự như phương thức nhập, ngoại trừ nó đặt loại phần tử đầu vào để đặt lại.

fieldset_open

fieldset_open tạo tập hợp trường html và phần tử chú giải. Nó có hai tham số sau đây -

thuộc tính - thuộc tính của phần tử fieldset dưới dạng mảng

huyền thoại - tên của truyền thuyết để tạo
// returns <fieldset class = "example-class" id = "example-id">
<legend>
   Custom Legend
</legend> 

echo Form::fieldset_open (array (
   'class'  => 'example-class', 
   'id'     => 'exampleid', 
   'legend' => 'Custom Legend'
));

fieldset_close

fieldset_close tạo thẻ đóng của trường HTML.
// returns </fieldset> 
echo Form::fieldset_close(); 

Lớp đầu vào

Lớp đầu vào cung cấp các phương thức để đọc tất cả dữ liệu yêu cầu cùng với các chi tiết biểu mẫu. Một số phương pháp quan trọng như sau:

uri
uri trả về URI hiện tại của yêu cầu
// request: http://localhost:8080/employee/welcome  
echo Input::uri(); // return /employee/welcome

phương pháp

phương thức trả về phương thức HTTP được sử dụng trong yêu cầu
echo Input::method() // "POST"

được

được phép đọc các biến $ _GET. Nó có hai tham số sau,

$ index - chỉ mục của mảng $ _GET

$ default - giá trị mặc định, nếu không tìm thấy chỉ mục.
echo Input::get('age', '20'); // returns $_GET['age']

bài đăng

bài cho phép đọc các biến $ _POST. Nó có hai tham số sau,

$ index - chỉ mục của mảng $ _POST

$ default - giá trị mặc định, nếu không tìm thấy chỉ mục
echo Input::get('age', '20'); // returns $_POST['age']

param

param cho phép tìm nạp mục từ các biến $ _GET, $ _POST, $ _PUT hoặc $ _DELETE. Nó có hai tham số sau,

$ index - chỉ mục của mảng

$ default - giá trị mặc định, nếu không tìm thấy chỉ mục

Nếu không có tham số nào được chỉ định, nó sẽ trả về tất cả các mục.
echo Input::param('age', '20'); // returns $_POST['age']

tập tin

tệp cho phép đọc biến $ _FILE. Nó có hai tham số sau,

$ index - chỉ mục của mảng $ _POST

$ default - giá trị mặc định, nếu không tìm thấy chỉ mục
echo Input::file();

is_ajax

is_ajax trả về true, nếu yêu cầu được thực hiện thông qua AJAX.
echo Input::is_ajax() // return false

giao thức

giao thức trả về giao thức HTTP được sử dụng trong yêu cầu.
echo Input::protocol() // returns "HTTP"

ip

ip trả về địa chỉ IP mà yêu cầu được thực hiện.
echo Input::ip() // returns "84.45.34.24" (Public IP Address)

real_ip

real_ip cố gắng trả về địa chỉ IP thực (nếu máy khách đứng sau proxy) thông qua đó yêu cầu được thực hiện.
echo Input::real_ip() // returns "10.76.12.1" (local private IP Address)

máy chủ

máy chủ cho phép đọc các biến $ _SERVER. Nó có hai tham số sau,

$ index - chỉ mục của mảng $ _POST

$ default - giá trị mặc định, nếu không tìm thấy chỉ mục.
echo Input::server('HTTP_HOST'); // returns localhost:8080

người giới thiệu

liên kết giới thiệu trả về liên kết giới thiệu từ biến $ _SERVER. Nó là một phương thức tắt để có được http referrer của yêu cầu hiện tại.

đại lý người dùng

user_agent trả về tác nhân người dùng từ biến $ _SERVER. Đó là một phương thức tắt để có được tác nhân người dùng http của yêu cầu hiện tại.

chuỗi truy vấn

query_string trả về chuỗi truy vấn từ biến $ _SERVER. Đó là một phương thức tắt để nhận chuỗi truy vấn của yêu cầu hiện tại.

tiêu đề

tiêu đề trả lại tiêu đề cụ thể hoặc tất cả các tiêu đề. Nó có hai tham số sau đây -

$ index - tên của các tiêu đề HTTP

$ default - giá trị mặc định, nếu không tìm thấy chỉ mục.
echo Input::headers('Content-Type'); // returns "text/html"

sự mở rộng

mở rộng trả về phần mở rộng URI của yêu cầu hiện tại.
// Example URL: http://localhost/test/ 
echo Input::extension();  // NULL  

// Example URL: http://localhost/test.html 
echo Input::extension();  // 'html'

Ví dụ làm việc

Hãy tạo một biểu mẫu đơn giản để thêm nhân viên mới sử dụng lớp Form và Input.

Tạo biểu mẫu

Tạo hành động mới, get_add trong trình điều khiển nhân viên như sau.
public function get_add() { 
   return Response::forge(View::forge('employee/add')); 
} 
Bây giờ, hãy thêm chế độ xem cho hành động, nhiên liệu / ứng dụng / lượt xem / nhân viên / add.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'); ?> 
   </head>
   
   <body> 
      <div class = "container"> 
         <?php 
            echo Form::open(array('action' => 'employee/add', 'method' => 'post')); 
         ?>  
         
         <div class = "form-group"> 
            <?php 
               echo Form::label('Employee name:', 'name'); 
               echo Form::input('name', '', array('class' => 'form-control')); 
            ?> 
         </div> 
         
         <div class = "form-group"> 
            <?php 
               echo Form::label('Employee age:', 'age'); 
               echo Form::input('age', '', array('class' => 'form-control')); 
            ?> 
         </div> 
         
         <?php echo Form::button('frmbutton', 'Submit', array(
            'class' => 'btn btn-default')); 
         ?> 
         
         <?php 
            echo Form::close(); 
         ?> 
      </div> 
   </body> 
   
</html>
Ở đây, chúng tôi đã sử dụng bootstrap để thiết kế biểu mẫu. PHP cung cấp hỗ trợ đầy đủ cho các thành phần bootstrap. Bây giờ, yêu cầu trang, http: // localhost: 8080 / employee / add sẽ hiển thị biểu mẫu sau

NIIT-ICT
ảnh minh họa


Biểu mẫu quy trình

Tạo hành động mới, post_add để 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 post_add() { 
   $name = Input::post('name'); 
   $age = Input::post('age'); 
   $model = new model_employee(); 
   $model->name = $name; 
   $model->age = $age; 
   $model->save();  
   Response::redirect('employee/list'); 
}

Ở đâ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 lưu vào cơ sở dữ liệu. Tiếp theo, chúng ta sẽ tạo trang danh sách nhân viên.

Danh sách nhân viên

Tạo hành động mới, action_list để liệt kê nhân viên trong cơ sở dữ liệu như sau.
public function action_list() { 
   $data = array(); 
   $data['emps'] = model_employee::find('all');
   return Response::forge(view::forge('employee/list', $data)); 
}
Tạo chế độ xem mới, nhiên liệu / ứng dụng / lượt xem / nhân viên / danh sách cho hành động trên như sau.
<ul> 
   <?php 
      foreach($emps as $emp) {  
   ?> 
   <li><?php echo $emp['name']; ?></li> 
   <?php 
   } 
   ?> 
</ul> 

Kiểm tra biểu mẫu

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

NIIT-ICT
ảnh minh họa

Sau đó, nó cho thấy tất cả các nhân viên (bao gồm cả một nhân viên mới được thêm) có sẵn trong cơ sở dữ liệu như sau:

NIIT-ICT
ảnh minh họa

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