FuelPHP - Hướng dẫn nhanh

FuelPHP là một khung ứng dụng web mã nguồn mở. Nó được viết bằng PHP 5.3 và thực hiện HMVC pattern.HMVCHierarchical Model-View-Controller framework cho phép yêu cầu phụ bộ điều khiển trả về một phần trang như nhận xét, menu, v.v., thay vì trang hoàn chỉnh như trong MVC bình thường.

FuelPHP được tạo ra với mong muốn kết hợp các phương pháp hay nhất từ ​​các khuôn khổ như CodeIgniterKohanavới những cải tiến và ý tưởng của riêng mình. Công cụ di chuyển cơ sở dữ liệu FuelPHP và các chức năng của giàn giáo được lấy cảm hứng từRuby on Rails khuôn khổ.

  • FuelPHP thúc đẩy power of command line thông qua một tiện ích được gọi là "Oil". Tiện ích này được thiết kế để giúp tăng tốc độ phát triển, tăng hiệu quả, kiểm tra, gỡ lỗi và hỗ trợ HTML.

  • FuelPHP hoàn toàn là một cách tiếp cận hướng đối tượng. Kiến trúc của nó dựa trên ý tưởng về tính mô-đun. Các ứng dụng có thể được chia thành các mô-đun và mọi thành phần đều có thể được mở rộng hoặc thay thế mà không cần viết lại một dòng mã nào. Fuel hỗ trợ bất kỳ trình phân tích mẫu nào chẳng hạn nhưSmarty, Twig, PHPTal, vv để phân tích cú pháp các chế độ xem.

  • FuelPHP community is largevà hoạt động tích cực với hơn 300 cộng tác viên. Cộng đồng lớn của nó thường xuyên tạo và cải tiến các gói và tiện ích mở rộng. Mục tiêu chính của khung FuelPHP là cung cấp tính linh hoạt và khả năng tương thích. Nó nhanh, dễ học và là giải pháp hoàn chỉnh để phát triển các ứng dụng web.

  • Điều khiến FuelPHP trở thành một trong những khung công tác hàng đầu được các nhà phát triển PHP sử dụng là - new version of FuelPHP is reverse-compatible with its older versionsvì API ổn định của nó. Nó cực kỳ linh hoạt.

  • Packages and modulesgiúp bạn dễ dàng và đơn giản để sử dụng lại mã hiện có một cách có hệ thống. FuelPHP cung cấp hiệu suất tối đa thông qua một thư viện nhỏ. Gỡ lỗi tương tác của nó cho phép dễ dàng loại bỏ các lỗi trong quá trình phát triển. Ngoài ra, mã sạch và ổn định của nó giúp lập trình dễ dàng hơn.

FuelPHP - Tính năng

FuelPHP cung cấp nhiều tính năng để tạo một ứng dụng web chính thức. Nó cung cấp các thành phần linh hoạt, cấu hình đơn giản, ORM dễ sử dụng, chế độ phát triển ứng dụng dựa trên REST, v.v. Sau đây là một số tính năng nổi bật:

  • Khung web linh hoạt và do cộng đồng điều khiển
  • Dễ dàng cấu hình và sử dụng
  • FuelPHP cực kỳ di động, hoạt động trên hầu hết mọi máy chủ
  • Hệ thống định tuyến URI linh hoạt
  • FuelPHP cung cấp hỗ trợ phát triển API RESTful
  • Mô hình ORM nhẹ
  • Lọc đầu vào và ngăn chặn việc đưa vào SQL
  • Khung xác thực và ủy quyền an toàn
  • Mã có thể tái sử dụng và dễ bảo trì hơn
  • Tự động tải lớp, quản lý phiên và xử lý ngoại lệ.

FuelPHP - Ưu điểm

FuelPHP là một khung HMVC PHP 5.3 thanh lịch cung cấp một tập hợp các thành phần để xây dựng các ứng dụng web với những ưu điểm sau:

  • Modular structure- Nhiên liệu không buộc bạn phải sử dụng mô-đun hoặc cấu trúc tệp HMVC. Nếu bạn muốn sử dụng, quá trình tích hợp khá dễ dàng. Ứng dụng FuelPHP được tạo theo cấu trúc mô-đun và trở nên dễ dàng hơn cho các nhà phát triển với những lợi ích rõ ràng.

  • HMVC pattern - Tính năng quan trọng nhất của framework này là HMVC (Hierarchical Model View Controller) giúp bạn dễ dàng truy cập hoặc sử dụng bất kỳ thuộc tính, phương thức lớp, hàm, tệp nào ở cấp cao hơn.

  • Secure hashing function- FuelPHP hỗ trợ các công cụ mã hóa mạnh mẽ và kỹ thuật băm mật khẩu. Nó xử lý mã hóa, giải mã và băm bằng PHPSecLib mạnh mẽ.

  • Scaffolding functionality- Giàn giáo là một phương pháp lập trình meta để xây dựng các hoạt động của cơ sở dữ liệu. Giàn giáo của nhiên liệu khá dễ dàng. Nó cho phép bạn có được một ứng dụng CRUD cơ bản với các bước rất đơn giản.

Các sản phẩm phổ biến sau đây sử dụng FuelPHP Framework -

  • Matic Technology- Nhà cung cấp toàn cầu các giải pháp phát triển phần mềm tùy chỉnh ra nước ngoài. Tại Matic Technologies, họ cung cấp tất cả các giải pháp tốt nhất có thể thông qua FuelPHP theo yêu cầu của khách hàng.

  • Kroobe- Kroobe là một công ty rao vặt mạng xã hội. Fuel cung cấp chi phí phát triển và dịch vụ cực kỳ thấp cho nhóm Kroobe để đạt được giải pháp hiệu quả.

Chương này giải thích cách cài đặt FuelPHP framework trên máy của bạn. Việc cài đặt FuelPHP rất đơn giản và dễ dàng. Bạn có hai phương pháp để tạo ứng dụng FuelPHP -

  • Phương pháp đầu tiên là Command line cài đặt bằng công cụ FuelPHP được gọi là Oil.

  • Phương pháp thứ hai là Composer basedcài đặt. Sử dụng FuelPHPComposer, cả để cài đặt và phụ thuộc gói, vì vậy hãy đảm bảo rằng trình tổng hợp được cài đặt cục bộ trước khi tiếp tục quá trình.

Chúng ta hãy xem xét chi tiết từng phương pháp một trong các phần tiếp theo.

yêu cầu hệ thống

Trước khi chuyển sang cài đặt, các yêu cầu hệ thống sau phải được đáp ứng.

Máy chủ web (Bất kỳ mục nào sau đây)

  • WAMP (Windows)
  • Microsoft IIS (Windows)
  • LAMP (Linux)
  • MAMP (Macintosh)
  • XAMP (Đa nền tảng)
  • Nginx (Đa nền tảng)
  • Máy chủ web phát triển tích hợp sẵn PHP (Đa nền tảng)

Hỗ trợ trình duyệt (Bất kỳ điều nào sau đây)

  • IE (Internet Explorer 8+)
  • Firefox
  • Google Chrome
  • Safari

PHP compatibility- PHP 5.3 trở lên. Để có được lợi ích tối đa, hãy sử dụng phiên bản mới nhất.

Hãy để chúng tôi sử dụng máy chủ web phát triển tích hợp sẵn của PHP cho hướng dẫn này. Máy chủ web phát triển tích hợp sẵn dễ dàng khởi động cũng như khá đầy đủ để hiểu những điều cơ bản về ứng dụng web FuelPHP mà không vướng vào sự phức tạp của thế giới máy chủ web và cấu hình.

Cài đặt dòng lệnh

Quá trình cài đặt dòng lệnh của FuelPHP rất dễ dàng và mất tối đa năm phút.

Cài đặt gói dầu

Oil là một gói / lệnh đặc biệt được cung cấp bởi FuelPHP framework để thực hiện nhiều tác vụ cần thiết trong quá trình phát triển ứng dụng FuelPHP bao gồm cài đặt, phát triển và thử nghiệm ứng dụng.

Để cài đặt Oil gói, mở một trình bao và chạy lệnh sau:

sudo curl https://get.fuelphp.com/oil | sh

Lệnh sử dụng curl để tải xuống và cài đặt gói dầu. Lệnh sẽ hiển thị kết quả tương tự như thông tin sau và cuối cùng cài đặt gói dầu.

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current 
                                 Dload  Upload   Total   Spent    Left  Speed 
100   479  100   479    0     0    353      0  0:00:01  0:00:01 --:--:--   353

Tạo một dự án mới

Để tạo một dự án mới bằng Oil, hãy sử dụng lệnh sau:

oil create <project_name>

Hãy tạo một dự án mới có tên “HelloWorld” bằng lệnh sau.

oil create HelloWorld

Bây giờ, bạn có thể thấy phản hồi tương tự như sau và cuối cùng tạo một ứng dụng FuelPHP khung xương đơn giản.

composer create-project fuel/fuel HelloWorld 
Installing fuel/fuel (1.8.0.1) 
   - Installing fuel/fuel (1.8.0.1) 
      Loading from cache  

Created project in HelloWorld  

Loading composer repositories with package information 
Updating dependencies (including require-dev) 
   - Installing composer/installers (v1.3.0) 
      Loading from cache
   - Installing fuelphp/upload (2.0.6) 
      Loading from cache  
   - Installing michelf/php-markdown (1.4.0) 
      Loading from cache  
   - Installing psr/log (1.0.2) 
      Loading from cache  
   - Installing monolog/monolog (1.18.2) 
      Loading from cache  
   - Installing phpseclib/phpseclib (2.0.0) 
      Loading from cache  
   - Installing fuel/core (1.8.0.4) 
      Loading from cache  
   - Installing fuel/auth (1.8.0.4) 
      Loading from cache  
   - Installing fuel/email (1.8.0.4) 
      Loading from cache  
   - Installing fuel/oil (1.8.0.4) 
      Loading from cache  
   - Installing fuel/orm (1.8.0.1) 
      Loading from cache  
   - Installing fuel/parser (1.8.0.4) 
      Loading from cache  
   - Installing fuel/docs (1.8.0.4) 
      Loading from cache
   ……………. 
   …………….  
   Writing lock file
   Generating autoload files

Phiên bản dầu

Để kiểm tra xem Dầu có sẵn và để kiểm tra phiên bản, hãy sử dụng lệnh sau:

$ cd HelloWorld $ php oil -v

Lệnh trên tạo ra kết quả sau:

Fuel: 1.8 running in "development" mode

Lệnh trợ giúp dầu

Để có được tài liệu trợ giúp cơ bản của Oil, hãy sử dụng lệnh sau:

$ php oil help

Lệnh trên sẽ hiển thị tài liệu trợ giúp tương tự như kết quả sau:

Usage: 
   php oil [cell|console|generate|package|refine|help|server|test]  
Runtime options: 
   -f, [--force]    # Overwrite files that already exist 
   -s, [--skip]     # Skip files that already exist 
   -q, [--quiet]    # Supress status output 
   -t, [--speak]    # Speak errors in a robot voice  
Description:   
   The 'oil' command can be used in several ways to facilitate quick development, help 
   with testing your application and for running Tasks.  
Environment: 
   If you want to specify a specific environment oil has to run in, overload the 
   environment variable on the commandline: FUEL_ENV=staging php oil <commands>
More information: 
   You can pass the parameter "help" to each of the defined command to get 
   information about that specific command: php oil package help  
Documentation:   
   http://docs.fuelphp.com/packages/oil/intro.html

Như bây giờ, bạn đã có ý tưởng về cách cài đặt Nhiên liệu sử dụng Dầu. Hãy xem qua cài đặt dựa trên trình soạn nhạc trong phần tiếp theo.

Cài đặt dựa trên trình soạn nhạc

Lệnh sau được sử dụng để cài đặt FuelPHP bằng Composer.

$ composer create-project fuel/fuel --prefer-dist.

Bản sao kho lưu trữ Git

Để cài đặt phiên bản phát triển mới nhất dưới dạng bản sao của kho lưu trữ git cục bộ, hãy sử dụng lệnh sau.

$ composer create-project fuel/fuel:dev-1.9/develop --prefer-source.

Chạy ứng dụng

Di chuyển đến thư mục chung của thư mục dự án, chạy ứng dụng bằng máy chủ sản xuất với lệnh sau.

$ cd path/to/HelloWorld/public
$ php -S localhost:8080 index.php

Nó tạo ra phản ứng sau.

PHP 5.5.31 Development Server started at Sun May 21 12:26:10 2017
Listening on http://localhost:8080
Document root is /Users/workspace/php-fuel/HelloWorld/public
Press Ctrl-C to quit.

Bây giờ, hãy yêu cầu URL, http://localhost:8080 và nó sẽ tạo ra kết quả sau.

Kết quả

Đây là cách đơn giản nhất để chạy ứng dụng FuelPHP trong môi trường phát triển. Nếu bạn tạo ứng dụng của mình theo cách này trong môi trường sản xuất, bạn sẽ phải đối mặt với các vấn đề bảo mật. Cách được đề xuất là thiết lập cấu hình máy chủ ảo. Nó được giải thích cho máy chủ web apache trong phần tiếp theo.

Thiết lập máy chủ ảo

Đây là cách an toàn hơn để truy cập ứng dụng FuelPHP. Để thiết lập máy chủ ảo, bạn cần liên kết tệp máy chủ ảo apache với ứng dụng của mình. Trong trường hợp ứng dụng mạng nội bộ, hãy chuyển hướng URL tệp máy chủ hệ thống đến máy chủ ảo.

Tệp máy chủ ảo

Mở máy chủ ảo và thêm các thay đổi sau.

<VirtualHost *:80> 
   ServerName hello.app 
   DocumentRoot /path/to/public 
   SetEnv FUEL_ENV “development”
   
   <Directory /path/to/public> 
      DirectoryIndex index.php 
      AllowOverride All 
      Order allow,deny 
      Allow from all 
   </Directory> 
</VirtualHost>

Tệp Máy chủ Hệ thống

Bây giờ, hãy thêm một mục nhập máy chủ vào máy của bạn bằng lệnh sau.

sudo vi /etc/hosts

Sau đó, thêm dòng sau vào cuối tệp.

127.0.0.1 hello.app

Để thực hiện tất cả các thay đổi có sẵn, hãy khởi động lại máy chủ Apache của bạn và yêu cầu url, http://hello.app. Nó tạo ra trang chủ FuelPHP.

FuelPHP dựa trên trận chiến đã thử nghiệm Model-View-Controller kiến trúc cùng với HMVC (Hierarchical MVC)ủng hộ. Trong khi MVC cung cấp khả năng phát triển ứng dụng linh hoạt và nhiều lớp, HMVC còn tiến thêm một bước nữa là cho phép mở rộng ứng dụng web.

Điểm mạnh của FuelPHP là nó không thực thi các cách cụ thể để phát triển một ứng dụng. Nó chỉ cung cấp một cấu trúc tiêu chuẩn đơn giản và dễ sử dụng. Các nhà phát triển có thể tự do sử dụng bộ chức năng được xác định trước do FuelPHP cung cấp hoặc sửa đổi nó bất cứ khi nào cần. Tất cả các tính năng được cung cấp bởi FuelPHP bao gồm cả tính năng cốt lõi có thể được thay đổi theo yêu cầu của ứng dụng.

Mô hình

Mô hình là thực thể kinh doanh của ứng dụng. Controller và View trao đổi dữ liệu dưới dạng Model. Mô hình cho phép trình bày thống nhất dữ liệu kinh doanh của chúng tôi. Nó cho phép lớp cơ sở dữ liệu tương tác với lớp ứng dụng web theo cách tiêu chuẩn và cung cấp một tùy chọn để chọn, lưu, chỉnh sửa và xóa các thực thể cơ sở dữ liệu của chúng tôi.

Bộ điều khiển

Một ứng dụng MVC điển hình bắt đầu từ Bộ điều khiển. Khi người dùng gửi yêu cầu đến ứng dụng web FuelPHP, ứng dụng sẽ thu thập tất cả thông tin về yêu cầu và gửi đến Bộ điều khiển. Bộ điều khiển thực hiện logic nghiệp vụ bắt buộc của trang được yêu cầu và sau đó gọi Chế độ xem có liên quan cùng với dữ liệu đã xử lý ở dạng Mô hình.

Lượt xem

View là lớp trình bày của ứng dụng MVC. Chế độ xem quyết định cách hiển thị Mô hình cho người dùng. Nó hỗ trợ kết xuất dữ liệu đơn giản theo bố cục nâng cao, cho phép trang web bình thường hóa thiết kế trên tất cả các trang. View cũng cung cấp hỗ trợ theo chủ đề, cho phép thay đổi thiết kế nhanh chóng trên toàn ứng dụng.

Người thuyết trình

Người thuyết trình là một tính năng đặc biệt được cung cấp bởi FuelPHP. Nó là chất kết dính giữa Controller và View. Bộ điều khiển có thể chia sẻ một số trách nhiệm cấp thấp của nó như truy xuất mô hình từ cơ sở dữ liệu, tạo dữ liệu cho chế độ xem, v.v. Bộ điều khiển gọi Presenter thay vì View, lần lượt gọi View. Presenter cho phép tách biệt thuần túy logic nghiệp vụ và lớp trình bày.

MVC phân cấp

FuelPHP cung cấp một tùy chọn để gọi một bộ điều khiển từ một bộ điều khiển khác, tương tự như yêu cầu từ khách hàng (trình duyệt). Nếu bất kỳ bộ điều khiển nào gọi bộ điều khiển khác, bộ điều khiển được gọi sẽ trả lại phản hồi cho bộ điều khiển đang gọi thay vì hiển thị nó cho máy khách (trình duyệt). Điều này cho phépwidgetizationcủa ứng dụng web. Ví dụ: phần bình luận có thể được hiển thị dưới dạng một trang độc lập cũng như một phần phụ của trang chính (blog).

Mô-đun

Một trong những tính năng nổi bật của FuelPHP là một phần của ứng dụng web có thể được chuyển đổi thành các mô-đun, phần này có thể được chia sẻ giữa các ứng dụng khác nhau. Ví dụ: một mô-đun blog được tạo cho một ứng dụng có thể được sử dụng lại trong một ứng dụng khác chỉ bằng cách sao chép mã mô-đun từ ứng dụng nguồn sang ứng dụng đích.

Lưu ý rằng việc tạo một mô-đun mới cũng đơn giản như phát triển ứng dụng chính. Cấu trúc tương tự như ứng dụng chính với ngoại lệ duy nhất là mô-đun phải mã hóa một thư mục riêng biệt.

Gói

FuelPHP cung cấp một tùy chọn để tổ chức mã thành một đơn vị duy nhất được gọi là Gói. Một gói có thể chứa một hoặc nhiều chức năng cần thiết cho ứng dụng web. Ví dụ, một thành phần cơ sở dữ liệu như ORM, email, v.v., có thể được tổ chức thành một gói và được sử dụng bất cứ khi nào cần.

Gói khác với Mô-đun theo nghĩa là Gói không chứa bất kỳ trang web nào hoặc một phần trang web. Gói có thể được sử dụng trong FuelPHP cũng như bất kỳ khung PHP nào khác.

Quy trình làm việc

Quy trình làm việc của FuelPHP rất đơn giản và dễ hiểu. Nó được mô tả trong sơ đồ sau.

  • Người dùng gửi yêu cầu đến ứng dụng.

  • Bộ điều khiển nhận yêu cầu và thu thập thông tin bằng cách tương tác với mô hình, sau đó tương tác với cơ sở dữ liệu.

  • Bộ điều khiển thu thập thông tin bằng cách tương tác với bộ điều khiển khác bằng cách gửi một yêu cầu con đến các bộ điều khiển khác.

  • Bộ điều khiển gửi mô hình đã truy xuất đến dạng xem, từ đó tạo ra bản trình bày và gửi nó đến máy khách dưới dạng phản hồi.

  • Trong một số trường hợp, người điều khiển có thể chuyển quyền điều khiển cho người thuyết trình. Trong trường hợp đó, người thuyết trình thu thập thông tin từ mô hình và gửi cho khách hàng. Ở đây, người trình bày không thực hiện bất kỳ logic nghiệp vụ nào, ngoại trừ truy xuất mô hình từ cơ sở dữ liệu.

Trong chương này, chúng ta sẽ xem cách tạo một ứng dụng đơn giản trong khuôn khổ FuelPHP. Như đã thảo luận trước đó, bạn biết cách tạo một dự án mới trong Fuel. Chúng ta có thể lấy một ví dụ về chi tiết Nhân viên.

Hãy bắt đầu bằng cách tạo một dự án có tên Employee bằng lệnh sau.

oil create employee

Sau khi thực hiện lệnh, một employee dự án được tạo với những thứ sau file structure -

employee 
├── CHANGELOG.md 
├── composer.json 
├── composer.lock 
├── composer.phar 
├── CONTRIBUTING.md 
├── fuel 
│   ├── app 
│   │   ├── bootstrap.php 
│   │   ├── cache 
│   │   ├── classes 
│   │   ├── config 
│   │   ├── lang 
│   │   ├── logs 
│   │   ├── migrations 
│   │   ├── modules 
│   │   ├── tasks 
│   │   ├── tests 
│   │   ├── themes 
│   │   ├── tmp 
│   │   ├── vendor 
│   │   └── views 
│   ├── core 
│   │   ├── base56.php 
│   │   ├── base.php 
│   │   ├── bootstrap.php
│   │   ├── bootstrap_phpunit.php 
│   │   ├── classes 
│   │   ├── composer.json 
│   │   ├── config 
│   │   ├── CONTRIBUTING.md 
│   │   ├── lang 
│   │   ├── phpunit.xml 
│   │   ├── tasks 
│   │   ├── tests 
│   │   ├── vendor 
│   │   └── views 
│   ├── packages 
│   │   ├── auth 
│   │   ├── email 
│   │   ├── oil 
│   │   ├── orm 
│   │   └── parser 
│   └── vendor 
│       ├── autoload.php 
│       ├── composer 
│       ├── fuelphp 
│       ├── michelf 
│       ├── monolog 
│       ├── phpseclib 
│       └── psr 
├── LICENSE.md 
├── oil 
├── public 
│   ├── assets 
│   │   ├── css 
│   │   ├── fonts 
│   │   ├── img 
│   │   └── js 
│   ├── favicon.ico 
│   ├── index.php 
│   └── web.config 
├── README.md 
└── TESTING.md  
42 directories, 21 files

Cấu trúc của ứng dụng

Khung FuelPHP cung cấp một cấu trúc ứng dụng được tổ chức tốt. Hãy để chúng tôi kiểm tra một số tệp và thư mục quan trọng của ứng dụng.

  • fuel - Chứa tất cả các tệp PHP.

  • public - Chứa tất cả các nội dung được truy cập trực tiếp thông qua trình duyệt như JavaScript, CSS, hình ảnh, v.v.

  • oil- Một tệp thực thi được sử dụng để chạy các tác vụ dòng lệnh như tạo mã hoặc gỡ lỗi tương tác trong ứng dụng của bạn. Nó là tùy chọn.

  • fuel/app/- Chứa tất cả các tệp PHP dành riêng cho ứng dụng. Nó chứa Mô hình, Chế độ xem và Bộ điều khiển.

  • fuel/core/ - Đây là nơi mà khung nhiên liệu tự tồn tại.

  • fuel/packages/- Chứa tất cả các gói nhiên liệu. Theo mặc định, nhiên liệu sẽ chứa ba gói: dầu, auth và orm. Các gói này sẽ không được tải trừ khi bạn yêu cầu.

  • fuel/app/config/- Chứa tất cả các tệp cấu hình liên quan đến ứng dụng. Tệp cấu hình ứng dụng chính, tệp config.php nằm ở đây.

  • fuel/app/classes/- Chứa tất cả các tệp PHP dựa trên MVC dành riêng cho ứng dụng. Nó chứa bộ điều khiển, mô hình, lớp trợ giúp, thư viện, v.v.

  • fuel/app/classes/controller/ - Bộ điều khiển được đặt ở đây.

  • fuel/app/classes/model/ - Mô hình được đặt ở đây.

  • fuel/app/views/- Chứa các tập tin xem. Không có quy ước đặt tên cụ thể cho các khung nhìn.

Thêm bộ điều khiển

Như đã thảo luận trước đó, FuelPHP dựa trên mô hình phát triển Model-View-Controller (MVC). MVC là một cách tiếp cận phần mềm tách logic ứng dụng khỏi trình bày. Trong mẫu MVC, bộ điều khiển đóng một vai trò quan trọng và mọi trang web trong ứng dụng cần được bộ điều khiển xử lý. Theo mặc định, bộ điều khiển được đặt ởfuel/app/classes/controller/thư mục. Bạn có thể tạo lớp Controller của riêng mình tại đây.

Di chuyển đến vị trí Nhiên liệu / ứng dụng / lớp / bộ điều khiển / và tạo tệp worker.php. Để tạo một bộ điều khiển mới, chỉ cần mở rộng lớp Bộ điều khiển do FuelPHP cung cấp, được định nghĩa như sau.

nhân viên.php

<?php 
   class Controller_Employee extends Controller { 
      public function action_home() { 
         
         // functionality of the home page  
         echo "FuelPHP-Employee application!"; 
      } 
   }

Bây giờ, chúng tôi đã tạo Bộ điều khiển nhân viên và thêm một phương thức công khai, action_home, để in một văn bản đơn giản.

định tuyến

Định tuyến phân giải URI trang web thành bộ điều khiển và hành động cụ thể. Mọi trang web trong ứng dụng FuelPHP phải được định tuyến trước khi thực thi bộ điều khiển. Theo mặc định, mỗi bộ điều khiển có thể được giải quyết bằng cách sử dụng mẫu URI sau.

<controller>/<action>

Ở đâu,

  • controller là tên của bộ điều khiển trừ không gian tên, nhân viên

  • action là tên của phương thức trừ từ khóa action_, home

Bộ điều khiển mới được tạo có thể được truy cập bởi http://localhost:8080/employee/home và nó sẽ tạo ra kết quả sau.

Kết quả

Trong chương này, chúng ta sẽ hiểu cách cấu hình ứng dụng FuelPHP. Theo mặc định, các tệp cấu hình được lưu trữ bên trongfuel/app/configthư mục. Cấu hình chính của ứng dụng làfuel/app/config/config.php. Cấu hình được chỉ định bằng cách sử dụng mảng liên kết của PHP.

Tổng quat

Theo mặc định, tất cả các tệp cấu hình mặc định được xác định trong fuel/core/configthư mục. Để ghi đè cấu hình mặc định, hãy thêm khóa tương ứng trong/fuel/app/config/config.phptập tin và sửa đổi giá trị. Chúng ta có thể sử dụng "ký hiệu dấu chấm" để đơn giản hóa mảng đa chiều. Ví dụ, các cấu hình sau đây phục vụ cùng một mục đích (tải các gói được chỉ định).

array("always_load" => array("packages" => array( ... ) ) ); 
always_load.packages = array( ... );

Cấu hình có thể được nhóm theo mục đích và được chỉ định bằng cách sử dụng các tệp khác nhau như db.php để cấu hình cơ sở dữ liệu, package.php để quản lý gói, v.v.

Loại định dạng cấu hình

FuelPHP khá linh hoạt và cung cấp các định dạng khác nhau để chỉ định cấu hình. Định dạng cấu hình mặc định là PHP sử dụng mảng php. Các tùy chọn khác là -

INI - Cấu hình dựa trên văn bản đơn giản được hỗ trợ bởi nhiều phần mềm bao gồm cả ngôn ngữ PHP.

[group]
key = value

YAML - Dễ hiểu, dựa trên thụt lề và quản lý cấu hình con người có thể đọc được.

group:
   key: value

JSON - Định dạng tệp dễ hiểu và được các nhà phát triển sử dụng nhiều nhất.

{ 
   "group" : 
   { 
      "key": "value" 
   } 
}

Memcached- Lưu trữ cấu hình trong một máy chủ memcached. Chi tiết máy chủ memcached có thể được chỉ định trong tệp cấu hình chính,fuel/app/config/config.php sử dụng config.memcached mục nhập.

DB- Lưu trữ cấu hình trong Hệ thống RDBMS. Cấu trúc bảng của bảng cấu hình như sau.

CREATE TABLE IF NOT EXISTS `config` ( 
   `identifier` char(100) NOT NULL, 
   `config` longtext NOT NULL, 
   `hash` char(13) NOT NULL, 
   PRIMARY KEY (`identifier`) 
)

Cơ sở dữ liệu và chi tiết bảng có thể được chỉ định trong tệp cấu hình bằng cách sử dụng các mục config.databaseconfig.table_name .

Môi trường

Môi trường cho phép FuelPHP hoạt động ở các chế độ khác nhau bằng cách tải các cấu hình khác nhau. FuelPHP hỗ trợ môi trường sau.

  • Development - \ Fuel :: DEVELOPMENT đặt chế độ phát triển

  • Production - \ Fuel :: PRODUCTION đặt chế độ sản xuất

  • Test - \ Fuel :: TEST đặt chế độ thử nghiệm

  • Staging - \ Fuel :: STAGING đặt chế độ dàn dựng

FuelPHP cũng hỗ trợ việc tạo ra một môi trường mới. Điều này sẽ cho phép mọi nhà phát triển có cài đặt cấu hình của riêng mình và họ có thể bật cài đặt này trong khi mã hóa và thử nghiệm ứng dụng. Cấu hình của một môi trường cụ thể có thể được thêm vào bằng cách chỉ cần tạo một thư mục với tên môi trường (ví dụ: test) và đặt tệp cấu hình bên trong thư mục mới tạo, được hiển thị như sau.

. ├── config.php 
├── db.php 
├── development 
│   └── db.php 
├── production 
│   └── db.php 
├── routes.php 
├── staging 
│   └── db.php
└── test 
    └── db.php  
4 directories, 7 files

Đặt môi trường của bạn

Có ba cách để thiết lập môi trường của bạn.

Option 1- Đặt môi trường với các biến môi trường của máy chủ web. Thêm mã sau vào phần máy chủ ảo tronghttpd.conftệp của máy chủ web Apache. Nó có thể được thêm vào.htaccess cả tệp.

SetEnv FUEL_ENV production

Option 2 - Đặt môi trường với tệp bootstrap FuelPHP, /fuel/app/bootstrap.php

Fuel::$env = (isset($_SERVER['FUEL_ENV']

Option 3 - Đặt Môi trường sử dụng Dầu

$ env FUEL_ENV = production php oil -v

Nó tạo ra kết quả sau.

Fuel: 1.8 running in "production" mode

Controllerschịu trách nhiệm xử lý từng yêu cầu gửi đến ứng dụng FuelPHP. Theo FuelPHP, bộ điều khiển được đặt tạifuel/app/classes/controller/. Đầu tiên, hãy tạo một Bộ điều khiển Nhân viên.

nhân viên.php

<?php  
   class Controller_Employee extends Controller { 
      public function action_home() { 
         echo "FuelPHP-Employee application!"; 
      }  
      
      public function action_index() { 
         echo "This is the index method of employee controller"; 
      } 
   }

Phương pháp điều khiển

Bộ điều khiển xử lý một yêu cầu web bằng cách sử dụng một trong các action_ phương pháp. Chúng ta có thể tạo bao nhiêu action_ method tùy thuộc vào yêu cầu của ứng dụng. Phương thức action_ mặc định là action_index . Phương thức action_index có thể được gọi bởi bất kỳ URL nào sau đây.

http://localhost:8080/employee/index
http://localhost:8080/employee/

Kết quả

Hãy để chúng tôi tạo ra một actionmethod, action_show trongemployee ứng dụng.

<?php  
   class Controller_Employee extends Controller { 
      public function action_home() { 
         echo "FuelPHP-Employee application!"; 
      }  
      public function action_index() { 
         echo "This is the index method of employee controller"; 
      }  
      public function action_show() { 
         echo "This is the show method of employee controller"; 
      } 
   }

Phương thức action_show có thể được gọi bằng URL sau.

http://localhost:8080/home/show

Kết quả

phương thức before ()

Chúng ta có thể tạo một phương pháp, beforetrong bộ điều khiển của chúng tôi. Phương thức này sẽ được thực thi trước mỗi lần gọi phương thức action_ . Nó sẽ không được gọi nếu phương thức đó hóa ra không tồn tại. Phương pháp này giúp chúng ta viết các thao tác phổ biến như kiểm tra đăng nhập, tìm nạp dữ liệu mặc định, v.v.

Hãy để chúng tôi tạo một phương thức before và in một tin nhắn văn bản đơn giản.

public function before() { 
   echo "This message comes from <em>before()</em> method</br>"; 
}

Lập chỉ mục trang với trước khi hành động

Hiển thị trang với trước khi hành động

phương thức after ()

after() phương pháp tương tự như before()nhưng được thực thi sau khi phương thức action_ được gọi. Phương thức after () nhận phản hồi làm đầu vào và trả về đối tượng phản hồi .

public function after($response) { if ( ! $response instanceof Response) { 
      $response = \Response::forge($response, $this->response_status); } return $response; 
}

Nếu đầu vào là NULL hoặc không phải là đối tượng phản hồi, thì hãy tạo một đối tượng Phản hồi mới bằng cách sử dụng phương thức rèn của Phản hồi và trả về. Chúng ta sẽ tìm hiểu chi tiết lớp Response trong các chương tiếp theo.

Mở rộng bộ điều khiển

Chúng tôi có thể mở rộng một bộ điều khiển từ một bộ điều khiển khác. Sau đây là cú pháp cơ bản.

class Controller_Employee extends Controller_Welcome { 
   // controller methods 
}

Điều này sẽ giúp ích trong việc chia sẻ các phương pháp.

Tạo bộ điều khiển

Fuel có tùy chọn tạo bộ điều khiển bằng lệnh Oil. Sau đây là cú pháp.

Cú pháp

oil g controller <controller-name>

Thí dụ

oil g controller sample

Sau khi thực hiện lệnh trên, bạn sẽ thấy phản hồi sau.

Kết quả

Creating view: /path/to/project/fuel/app/views/template.php 
Creating view: /path/to/project/fuel/app/views/sample/index.php 
Creating controller: /path/to/project/fuel/app/classes/controller/sample.php

Loại bộ điều khiển

FuelPHP cung cấp các loại bộ điều khiển khác nhau cho nhiều mục đích khác nhau. Chúng như sau:

  • Bộ điều khiển cơ sở
  • Bộ điều khiển mẫu
  • Bộ điều khiển phần còn lại
  • Bộ điều khiển hỗn hợp

Bộ điều khiển cơ sở

Bộ điều khiển là bộ điều khiển cơ bản cho tất cả các loại bộ điều khiển khác nhau có sẵn trong FuelPHP. Nó cung cấp tất cả các chức năng cơ bản cần thiết để xử lý một yêu cầu web. Nó hỗ trợ Request, Response, Session, v.v. Chúng tôi sẽ sử dụng nó trong tất cả các ví dụ trừ khi được chỉ định khác.

Bộ điều khiển mẫu

Bộ điều khiển Mẫu là một phần mở rộng của bộ điều khiển cơ sở. Nó có hỗ trợ mẫu, được xác định trước các phương thức before () và after (). Về cơ bản, nó có thể được sử dụng để bao bọc chế độ xem của bạn trong một bố cục với đầu trang, chân trang, thanh bên, v.v. Để tạo bộ điều khiển mẫu, chúng ta cần mở rộng lớp Controller_Template . Theo mặc định, tất cả các phương thức của một lớp mở rộng Controller_Template cần phải sử dụng mẫu.

Nó được định nghĩa như sau.

class Controller_Employee extends Controller_Template { 
   public function action_index() { 
      // add methods 
   } 
}

Chúng ta sẽ thảo luận thêm về bộ điều khiển mẫu trong chương Chế độ xem.

Bộ điều khiển phần còn lại

Bộ điều khiển phần còn lại là một phần mở rộng của Bộ điều khiển cơ sở. Nó có hỗ trợ được xác định trước cho lập trình API REST. Điều này sẽ cho phép bạn xây dựng các API một cách dễ dàng.

Để tạo bộ điều khiển nghỉ, bạn cần mở rộng lớp Controller_Rest . Nó được định nghĩa như sau.

class Controller_Employee extends Controller_Rest { 
   public function action_index() { 
      // add methods 
   } 
}

Chúng ta sẽ thảo luận thêm về bộ điều khiển nghỉ trong chương Ajax.

Bộ điều khiển hỗn hợp

Bộ điều khiển hỗn hợp thực hiện chức năng của cả bộ điều khiển REST và bộ điều khiển Mẫu trong một bộ điều khiển cơ sở duy nhất.

Bản đồ định tuyến yêu cầu một URI tới phương thức của bộ điều khiển cụ thể. Trong chương này, chúng ta sẽ thảo luận về khái niệmrouting chi tiết trong FuelPHP.

Cấu hình

Tệp cấu hình định tuyến được đặt tại fuel/app/config/routes.php. Mặc địnhroutes.php tệp được định nghĩa như sau:

<?php 
   return array ( 
      '_root_'  => 'welcome/index',   // The default route 
      '_404_'   => 'welcome/404',     // The main 404 route 
      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'), 
   );

Đây, _root_là đường dẫn mặc định được xác định trước, sẽ được khớp khi ứng dụng được yêu cầu với đường dẫn gốc, / ví dụ: http: // localhost: 8080 / . Giá trị của _root_ là bộ điều khiển và hành động sẽ được giải quyết khi nó được khớp.welcome/indexgiải quyết cho bộ điều khiển Controller_Welcome và phương thức hành động action_index . Tương tự, chúng tôi có các tuyến đường dành riêng sau đây.

  • root - Lộ trình mặc định khi không có URI nào được chỉ định.

  • 403 - Nó ném khi HttpNoAccessException được tìm thấy.

  • 404 - Nó trả về khi không tìm thấy trang.

  • 500 - Nó ném khi HttpServerErrorException được tìm thấy.

Định tuyến đơn giản

Lộ trình được so sánh với URI yêu cầu. Nếu tìm thấy kết quả phù hợp, yêu cầu sẽ được chuyển đến URI. Định tuyến đơn giản được mô tả như sau,

return array ( 
   'about'  => 'site/about', 
   'login' => 'employee/login', 
);

Đây, about khớp với http: // localhost: 8080 / about và giải quyết bộ điều khiển, Controller_Site và phương thức hành động, action_about

login khớp với http: // localhost: 8080 / login và giải quyết bộ điều khiển, Controller_Login và phương thức hành động, action_login

Định tuyến nâng cao

Bạn có thể bao gồm bất kỳ regex nào vào các tuyến đường của mình. Fuel hỗ trợ các tính năng định tuyến nâng cao sau:

  • :any - Điều này khớp với bất kỳ thứ gì từ thời điểm đó trở đi trong URI, không khớp với "không có gì"

  • :everything - Giống như: bất kỳ, nhưng cũng khớp với "không có gì"

  • :segment - Phân đoạn này chỉ khớp với 1 phân đoạn trong URI, nhưng phân đoạn đó có thể là bất kỳ phân đoạn nào

  • :num - Điều này khớp với bất kỳ số nào

  • :alpha - Điều này khớp với bất kỳ ký tự alpha nào, bao gồm UTF-8

  • :alnum - Điều này khớp với bất kỳ ký tự chữ và số nào, bao gồm UTF-8

Ví dụ: tuyến sau phù hợp với URI http: // localhost: 8080 / hello / FuelPHP và giải quyết controller, Controller_Welcome và action action_hello

'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'),

Phương thức hành động tương ứng trong Controller_Welcome như sau,

public function action_hello() { 
   $this->name = Request::active()->param('name', 'World'); $message = "Hello, " . $this->name; echo $message; 
}

Ở đây, chúng tôi đã sử dụng lớp Request để lấy tham số tên từ URL. Nếu tên không được tìm thấy, thì chúng tôi đang sử dụng World làm giá trị mặc định. Chúng ta sẽ học lớp Yêu cầu trong chương Yêu cầuphản hồi .

Kết quả

Hành động phương pháp HTTP

FuelPHP hỗ trợ các tuyến đường để khớp với các hành động có tiền tố phương thức HTTP. Sau đây là cú pháp cơ bản.

class Controller_Employee extends Controller { 
   public function get_index() { 
      // called when the HTTP method is GET. 
   }  
   public function post_index(){ 
      // called when the HTTP method is POST. 
   } 
}

Chúng tôi có thể định tuyến các URL của bạn đến bộ điều khiển và hành động dựa trên động từ HTTP trong tệp cấu hình như sau.

return array ( 
   // Routes GET /employee to /employee/all and POST /employee to /employee/create 
   ‘employee’ => array(array('GET', new Route(‘employee/all')), array('POST', 
      new Route(‘employee/create'))), 
);

Yêu cầu HTTP và phản hồi HTTP đóng một vai trò quan trọng trong bất kỳ ứng dụng web nào. Chúng tôi cần có được đầy đủ chi tiết của yêu cầu http để xử lý yêu cầu đó một cách chính xác. Sau khi xử lý, chúng tôi cần gửi dữ liệu đã xử lý đến máy khách thông qua phản hồi http.

FuelPHP cung cấp tuyệt vời RequestResponselớp để đọc và ghi yêu cầu HTTP và phản hồi HTTP tương ứng. Hãy để chúng tôi tìm hiểu về cả haiRequestResponse lớp trong chương này.

Yêu cầu

Trong một ứng dụng web thông thường, ứng dụng cần phân tích cú pháp chi tiết của yêu cầu hiện tại. Lớp Request cung cấp các phương thức đơn giản để phân tích cú pháp yêu cầu hiện tại sẽ được ứng dụng xử lý. Yêu cầu cũng cung cấp một tùy chọn để tạo một yêu cầu mới bằng cách hoạt động như một ứng dụng khách http.

Tạo một yêu cầu mới cho phép ứng dụng yêu cầu phần khác của ứng dụng hoặc toàn bộ ứng dụng khác và hiển thị kết quả. Hãy để chúng tôi tìm hiểu cách phân tích cú pháp yêu cầu đến trong chương này và tìm hiểu cách tạo một yêu cầu mới trong chương Yêu cầu HMVC.

Phân tích cú pháp một yêu cầu

Lớp Request cung cấp ba phương thức để lấy chi tiết của yêu cầu http. Chúng như sau,

active - Đây là một phương thức tĩnh, trả về yêu cầu http đang hoạt động hiện tại.

$currentRequest = Request::active();

param - Nó trả về giá trị của tham số được chỉ định. Nó chứa hai đối số. Đối số đầu tiên là tên tham số và đối số thứ hai là giá trị trả về, nếu tham số không khả dụng trong yêu cầu http hiện tại.

$param = Request::active()->param('employee_name', 'none');

params - Nó giống như param ngoại trừ nó trả về tất cả các tham số dưới dạng một mảng.

$params = Request::active()->params();

Thí dụ

Hãy để chúng tôi tạo một biểu mẫu đơn giản và xử lý biểu mẫu bằng cách sử dụng lớp yêu cầu.

Step 1- Tạo một action mới, action_request trong bộ điều khiển nhân viên.

public function action_request() { 
}

Step 2 - Gọi các phương thức yêu cầu để lấy tất cả các tham số của yêu cầu hiện tại.

public function action_request() { 
   $params = Request::active()->params(); 
}

Step 3 - Dump mảng tham số đã tìm nạp.

public function action_request() { 
   $params = Request::active()->params(); echo dump($params); 
}

Step 4- Thay đổi định tuyến để bao gồm các thông số trong tệp cấu hình tuyến đường, fuel / app / config / route.php

'employee/request(/:name)?' => array('employee/request', 'name' => 'name'),

Bây giờ, yêu cầu hành động mới, http: // localhost: 8080 / worker / request / Jon, nó sẽ hiển thị phản hồi sau.

Phản ứng

Lớp phản hồi cung cấp các tùy chọn để tạo phản hồi http. Theo mặc định, chúng ta không cần sử dụng trực tiếp một lớp phản hồi trong hầu hết các tình huống. Thay vào đó, chúng tôi sử dụng View (mà chúng tôi sẽ tìm hiểu trong chương tiếp theo) để tạo phản hồi http. View ẩn phản hồi http từ nhà phát triển và gửi phản hồi đến máy khách bằng cách sử dụng lớp Phản hồi bên dưới . Trong tình huống nâng cao, chúng tôi sử dụng trực tiếp lớp Phản hồi và tạo phản hồi http hoàn chỉnh.

Tạo phản hồi

Câu trả lời bao gồm tiêu đề và nội dung. Tiêu đề chính là mã trạng thái http. Mã trạng thái Http là các mã tiêu chuẩn được xác định trong giao thức HTTP để mô tả phản hồi. Ví dụ: mã trạng thái, 200 có nghĩa là yêu cầu thành công.

Lớp phản hồi cung cấp ba đối số để tạo phản hồi http,

  • $body - nội dung của phản hồi http

  • $status_code - mã trạng thái của phản hồi http

  • $headers - tiêu đề tùy chọn dưới dạng mảng

$body = "Hi, FuelPHP"; 
$headers = array ( 'Content-Type' => 'text/html', ); $response = new Response($body, 200, $headers);

Hãy để chúng tôi tạo một hành động mới, action_response trong bộ điều khiển nhân viên như sau.

public function action_response() { 
   $body = "Hi, FuelPHP"; $headers = array ('Content-Type' => 'text/html',); 
   $response = new Response($body, 200, $headers); return $response; 
}

Kết quả

Phương pháp

Lớp phản hồi cung cấp rất nhiều phương thức để thao tác các phản hồi http. Chúng như sau,

forge - Nó giống như hàm tạo lớp phản hồi như đã thấy ở trên.

return Response::forge("Hi, FuelPHP", 404);

redirect- Nó cung cấp tùy chọn chuyển hướng đến một URL thay vì gửi phản hồi. Nó chứa các đối số sau,

a.url- url đích b. method - các phương pháp chuyển hướng. vị trí (mặc định) và làm mới c . redirect_code - mã trạng thái http. Giá trị mặc định là 302.

// use a URL 
Response::redirect('http://some-domain/index', 'refresh');  

// or use a relative URI 
Response::redirect('employee/list');

redirect_back- Nó tương tự như phương pháp chuyển hướng ngoại trừ nó chuyển hướng đến trang trước. Chúng tôi có thể chỉ định trang chuyển hướng, nếu không có trang quay lại.

// If there is no back page, go to the employee list page 
Response::redirect_back('/employee/list', 'refresh');

set_status - Nó cung cấp một tùy chọn để đặt mã trạng thái http.

$response = new Response(); $response->set_status(404);

set_header - Nó cung cấp một tùy chọn để đặt tiêu đề http.

$response = new Response(); $response->set_header('Content-Type', 'application/pdf');  

// replace previous value using third arguments 
$response->set_header('Content-Type', 'application/pdf', 'text/plain');

set_headers - Nó giống như set_header ngoại trừ nó cung cấp một tùy chọn để đặt nhiều tiêu đề bằng cách sử dụng mảng.

$response = new Response(); 
$response->set_headers (array 
   'Content-Type' => 'application/pdf', 
   'Pragma' => 'no-cache', 
));

get_header - Nó cho phép lấy các chi tiết tiêu đề đã đặt trước đó.

$response = new Response(); 
$response->set_header('Pragma', 'no-cache'); // returns 'no-cache' $header = $response->get_header('Pragma'); // returns array('Pragma' => 'no-cache') $header = $response->get_header();

body - Nó cung cấp một tùy chọn để đặt nội dung của phản hồi http.

$response = new Response(); 
$response->body('Hi, FuelPHP'); // returns 'Hi, FuelPHP' $body = $response->body();

send_headers- Nó gửi các tiêu đề cho khách hàng được yêu cầu. FuelPHP sử dụng phương pháp này để gửi phản hồi cho khách hàng. Thông thường, chúng ta không cần sử dụng phương pháp này.

$response->send_headers();

send - Tương tự như send_headers ngoại trừ tiêu đề có thể bị hạn chế trong phản hồi http.

// send the headers as well 
$response->send(true); // only send the body $response->send(false); 
$response->send();

Viewlà lớp trình bày của ứng dụng MVC. Nó tách logic ứng dụng khỏi logic trình bày. Khi đó, khi bộ điều khiển cần tạo HTML, CSS hoặc bất kỳ nội dung nào khác, bộ điều khiển sẽ chuyển tiếp tác vụ tới công cụ xem.

FuelPHP cung cấp một lớp đơn giản và linh hoạt, View với tất cả các tính năng cần thiết của một công cụ xem. Lớp xem hỗ trợ kết xuất tệp dạng xem. Tệp xem là một trang HTML với các hướng dẫn PHP được nhúng. Các biến của tệp dạng xem có thể được đặt bằng cách sử dụng lớp Xem dưới dạng mảng PHP và được tham chiếu trong tệp dạng xem bằng khóa của mảng. Hãy để chúng tôi kiểm tra một số phương thức quan trọng của lớp View.

làm giả

  • Purpose - Tạo một đối tượng View mới

  • Parameter - Sau đây là các thông số

    • $file - Đường dẫn của tệp chế độ xem liên quan đến thư mục chế độ xem, nhiên liệu / ứng dụng / chế độ xem

    • $data - Mảng giá trị

    • $filter - Đặt mã hóa tự động, mặc định cho cài đặt trong tệp cấu hình chính

  • Returns - Bản sao của chế độ xem

Ví dụ,

$view = View::forge ('path/to/view', array( 'title' => "Show employee, 'employees' => $employees, 
));

Bộ lọc tự động

  • Purpose - Đặt có mã hóa dữ liệu hay không

  • Parameter - Sau đây là thông số

    • $filter - true / false

  • Returns - Đối tượng xem hiện tại

Ví dụ,

$view->auto_filter(); 
$view = $view->auto_filter(false);

set_filename

  • Purpose - Cho phép thiết lập hoặc thay đổi tập tin xem.

  • Parameter - Sau đây là tham số -

    • $file - Đường dẫn để xem tệp liên quan đến thư mục chế độ xem, nhiên liệu / ứng dụng / chế độ xem

  • Returns - Đối tượng Xem hiện tại

Ví dụ,

$view = new View();
$view>set_filename('path/to/view');

bộ

  • Purpose - Đặt giá trị của một hoặc nhiều biến

  • Parameter - Sau đây là các thông số

    • $key - Tên biến hoặc mảng giá trị

    • $value - Giá trị / null

    • $filter - Cài đặt mã hóa, true / false

  • Returns - Đối tượng xem hiện tại

Ví dụ,

$view = new View(); $view->set(array('name' => 'Jon'));

set_global

set_global tương tự như set, ngoại trừ việc nó áp dụng cho tất cả các chế độ xem và các biến có thể truy cập được bởi tất cả các chế độ xem. Đây là một phương thức tĩnh.

View::set_global('name', 'Jon', false);

set_safe

  • Purpose - Đặt giá trị của một hoặc nhiều biến khi bật mã hóa an toàn.

  • Parameter - Sau đây là các thông số -

    • $key - Tên biến hoặc mảng giá trị

    • $value - Giá trị / null

  • Returns - Đối tượng xem hiện tại

Ví dụ,

$view = new View(); $view->set_safe(array('name' => 'Jon'), null);

được

  • Purpose - Nhận giá trị của một hoặc nhiều biến

  • Parameter - Sau đây là các thông số

    • $key - Tên biến

    • $default - Giá trị mặc định được trả lại nếu không tìm thấy khóa

  • Returns - Giá trị của khóa đầu vào

Ví dụ,

$view = new View(); $name = $view>get('name');  // name = 'Jon'

kết xuất

  • Purpose - Kết xuất các tệp xem thành chuỗi bằng cách hợp nhất nó với các biến cục bộ và toàn cục

  • Parameter - Sau đây là các thông số -

    • $file - Tên tệp chế độ xem

  • Returns - Tệp xem được kết xuất dưới dạng chuỗi

Ví dụ,

$html = View::forge()->render('/path/to/view');

Tạo chế độ xem

Để hiểu các khung nhìn, chúng ta hãy sửa đổi phương thức hành động, action_show của controller, Controller_Eaffee .

nhân viên.php

<?php  
   class Controller_Employee extends Controller { 
      public function action_show() {
         return View::forge('employee/show'); 
      } 
   }

Bây giờ, hãy tạo một thư mục nhân viên trong thư mục views, đặt tại fuel / app / views . Sau đó, tạo một tệp show.php bên trong thư mục nhân viên và thêm mã sau.

show.php

<h3> My first view </h3>

Bây giờ, yêu cầu url http: // localhost: 8080 / worker / show và nó tạo ra kết quả như sau.

Truyền dữ liệu để xem

Chúng ta có thể chuyển dữ liệu đến các khung nhìn bằng cách sử dụng các phương thức View như đã thảo luận trước đó. Sau đây là một ví dụ đơn giản.

nhân viên.php

class Controller_Employee extends Controller { 
   public function action_show() { 
      $data = array(); //stores variables going to views 
      $data['name'] = ‘Jon’; $data[‘job’] = ‘Designer’;  
      
      //assign the view to browser output 
      return View::forge('employee/show', $data); 
   } 
}

Bây giờ, hãy thêm các thay đổi trong view tập tin.

show.php

<html> 
   <body> 
      Hello, <?php echo $name; ?>. 
      Your job is, <?php echo $job; ?>. 
   </body> 
</html>

Sau khi yêu cầu URL, nó sẽ hiển thị tên và công việc như sau:

Xem bộ lọc

Chế độ xem sử dụng mã hóa đầu ra để chuyển bất kỳ thứ gì bạn muốn. Nếu bạn muốn chuyển dữ liệu chưa được lọc, chúng ta có thể sử dụng phương pháp set.

nhân viên.php

class Controller_Employee extends Controller { 
   public function action_show() { 
      $view = \View::forge('employee/show'); 
      $view->set('name', 'Jon', true); $view->set('job', '<em>Designer</em>', false); 
      return $view; 
   } 
}

Sau khi yêu cầu URL, nó sẽ hiển thị chi tiết công việc theo kiểu nhấn mạnh, như sau.

Chế độ xem lồng nhau

FuelPHP hỗ trợ các chế độ xem lồng nhau. Trong các dạng xem lồng nhau, một dạng xem có thể chứa một hoặc nhiều dạng xem. Để thiết lập các khung nhìn trong một khung nhìn khác, chúng ta có thể sử dụng phương thức kết xuất như sau.

nhân viên.php

class Controller_Employee extends Controller { 
   public function action_nestedview() { 
      
      //assign variables 
      $data = array(); 
      $data['title'] = 'Home'; $data['name'] = 'Jon'; 
      $data['job'] = 'Designer'; $views = array(); 
      $views['head'] = View::forge('head', $data)->render(); 
      $views['content'] = View::forge('employee/show', $data)->render();  
      return View::forge('layout', $views, false)->render(); 
   } 
}

Nhiên liệu / ứng dụng / lượt xem / layout.php

<html> 
   <head> 
      <?php echo $head; ?> 
   </head> 
   
   <body> 
      <?php echo $content; ?> 
   </body> 
</html>

Nhiên liệu / ứng dụng / lượt xem / head.php

<title>
   <?php echo $title; ?>
</title>

Nhiên liệu / ứng dụng / lượt xem / nhân viên / show.php

Hello, <?php echo $name; ?>. Your job is, <?php echo $job; ?>.

Sau khi yêu cầu URL, http: // localhost: 8080 / worker / nestedview và kiểm tra chế độ xem nguồn, nó sẽ đưa ra mã sau.

<html> 
   <head> 
      <title>Home</title> 
   </head> 
   
   <body> 
      Hello, Jon. 
      Your job is, Designer. 
   </body> 
</html>

Bộ điều khiển mẫu

FuelPHP cung cấp một bộ điều khiển, Controller_Template với khái niệm bố cục tích hợp. Khái niệm bố cục được thực hiện bằng cách sử dụngbefore()after()phương pháp của Controller. Để sử dụng bộ điều khiển mẫu, chúng ta cần mở rộng bộ điều khiển bằng Controller_Template thay vì Bộ điều khiển. Trong khi sử dụng phương thức after () / before (), chúng ta cần gọi parent :: before và parent :: after, nếu không, mẫu sẽ bị hỏng.

<?php 
   class Controller_Test extends Controller_Template { 
      public function before() { 
         parent::before(); 
         // do stuff 
      } 
        
      public function after($response) { $response = parent::after($response); // do stuff return $response; 
      } 
   }

template.php

Nó là một tệp mẫu mặc định trong Fuel. Tệp mẫu được sử dụng để gọi JS, CSS, HTML và gọi các phần tử chế độ xem. Nó được đặt tạifuel/app/views/. Các mẫu được sử dụng để bao bọc chế độ xem của bạn trong một bố cục có đầu trang, chân trang, thanh bên, v.v. Chúng ta có thể thay đổi mẫu mặc định bằng cách sử dụng biến $ template trong phương thức hành động như sau.

Nhiên liệu / ứng dụng / lớp / bộ điều khiển / test.php

<?php  
   class Controller_Test extends Controller_Template { 
      public $template = 'template_test'; 
      public function action_index() { 
         $this->template->title = 'Example Page'; $this->template->content = View::forge('test/index'); 
      } 
   }

Nhiên liệu / ứng dụng / lượt xem / template_test.php

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title><?php echo $title; ?></title> <?php echo Asset::css('bootstrap.css'); ?> </head> <body> <div> <?php echo $content; ?>
      </div> 
   </body> 
</html>

fuel / app / views / test / index.php

<h3>My Test page</h3>

Bây giờ, hãy yêu cầu URL http: // localhost: 8080 / test và nó cho kết quả như sau.

Kết quả

<!DOCTYPE html> 
<html> 
   <head> 
      <meta charset = "utf-8"> 
      <title>Example Page</title> 
      <link type = "text/css" rel = "stylesheet" 
         href = "http://localhost:8080/assets/css/bootstrap.css?1464964766" />
   </head> 
   
   <body> 
      <div> 
         <h3>My Test page</h3> 
      </div> 
   </body> 
</html>

Tạo trang xem

Bạn có thể tạo trang xem bằng bảng điều khiển Fuel's Oil. Sau đây là cú pháp cơ bản.

oil g controller <controller-name> <page1> <page2> ..

Để tạo bộ điều khiển quản trị với trang chủ và trang đăng nhập, hãy sử dụng lệnh sau.

oil g controller admin home login

Kết quả

Creating view: /path/to/app/fuel/app/views/admin/home.php 
Creating view: /path/to/app/fuel/app/views/admin/login.php 
Creating controller: /path/to/app/fuel/app/classes/controller/admin.php

FuelPHP cung cấp một lớp bổ sung sau bộ điều khiển để tạo các khung nhìn. Khi bộ điều khiển xử lý đầu vào và được thực hiện với logic nghiệp vụ, nó sẽ gửi điều khiển đếnPresenter, xử lý logic bổ sung như tìm nạp dữ liệu từ cơ sở dữ liệu, thiết lập dữ liệu dạng xem, v.v., rồi gọi đối tượng Dạng xem.

Chúng ta có thể kết xuất các khung nhìn bằng cách sử dụng lớp Presenter như sau:

Nhiên liệu / ứng dụng / lớp học / bộ điều khiển / nhân viên.php

public Controller_Employee extends Controller { 
   public function action_welcome() { 
      return Presenter::forge('employee/hello'); 
   } 
}

Vị trí mặc định của lớp trình bày là nhiên liệu / ứng dụng / các lớp / người trình bày / . Sau đây là một ví dụ đơn giản.

Nhiên liệu / ứng dụng / lớp học / người trình bày / nhân viên / hello.php

<?php  
   class Presenter_Employee_Hello extends Presenter { 
      public function view() { 
         $this->name = Request::active()->param('name', 'World'); 
      } 
   }

Tệp dạng xem của lớp trình bày ở trên phân giải thành worker / hello.php liên quan đến thư mục dạng xem , như được chỉ định.

Nhiên liệu / ứng dụng / lượt xem / nhân viên / hello.php

<h3>Hi, <?php echo $name; ?></h3>

Cuối cùng, thay đổi lộ trình để phù hợp với hành động chào đón của nhân viên, được hiển thị như sau:

Nhiên liệu / ứng dụng / cấu hình / tuyến đường.php

'employee/hello(/:name)?' => array('employee/welcome', 'name' => 'hello'),

Bây giờ, khi yêu cầu URL, http: // localhost: 8080 / worker / hello / Jon hiển thị kết quả sau.

Kết quả

Mô hình đóng một vai trò quan trọng trong khuôn khổ web FuelPHP. Nó đại diện cho các thực thể kinh doanh của ứng dụng. Chúng được cung cấp bởi khách hàng hoặc được tìm nạp từ cơ sở dữ liệu phụ trợ, được thao tác theo các quy tắc nghiệp vụ và tồn tại trở lại cơ sở dữ liệu. Hãy để chúng tôi tìm hiểu về các mô hình và cách chúng tương tác với hệ thống back-end trong chương này.

Tạo mô hình

Trong FuelPHP, mô hình chỉ đơn giản là lớp PHP đơn giản mở rộng lớp Mô hình tích hợp sẵn. Theo mặc định, các mô hình có thể có tiền tố là Model_ tương tự như bộ điều khiển và phải được đặt trongfuel/app/classes/model/thư mục. Hãy để chúng tôi tạo một mô hình nhân viên cơ bản và mở rộng nó khi chúng tôi tiếp tục.

Nhiên liệu / ứng dụng / lớp học / mô hình / nhân viên.php

<?php 
   namespace Model; 

   class Model_Employee extends \Model { 
      public static function fetchAll() { 
         // Code to fetch employee from database 
      } 
   }

Truy cập một mô hình

Khi một mô hình được xác định, nó có thể được sử dụng tự do trong bất kỳ bộ điều khiển nào chỉ bằng cách đưa nó vào bộ điều khiển như sau.

use \Model\Employee; 

class Controller_Employee extends Controller { 
   public function action_index() { 
      $employees = Employee::fetchAll(); 
   } 
}

Tổng quan về cơ sở dữ liệu

FuelPHP cung cấp lớp trừu tượng cơ sở dữ liệu của riêng mình để lấy dữ liệu từ cơ sở dữ liệu. Nó cung cấp cả công cụ dựa trên ORM cơ bản cũng như nâng cao. Bộ công cụ cơ bản bao gồm các lớp dựa trên DB, DBUtil và Query_Builer. Bộ công cụ nâng cao là Orm. Bộ công cụ Orm có nguồn gốc từ bộ công cụ cơ sở và được đóng gói như một gói riêng biệt.

Cấu hình cơ sở dữ liệu

FuelPHP tách cài đặt cơ sở dữ liệu khỏi tệp cấu hình chính và tệp là fuel/app/config/db.php. Nó hỗ trợ một cài đặt riêng cho từng môi trường. Hiện tại, FuelPHP hỗ trợ trình điều khiển MySQL, MySQLi và PDO. Cài đặt mẫu như sau:

<?php  
   return array ( 
      'development' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'    => 'localhost', 
            'port'        => '3306', 
            'database'    => 'tutorialspoint_fueldb', 
            'username'    => 'root', 
            'password'    => 'password', 
            'persistent'  => false, 
            'compress'    => false, 
         ), 
         
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ), 
   )

Bộ công cụ dựa trên DB

Các DB classlà tùy chọn đơn giản nhất để truy cập cơ sở dữ liệu từ ứng dụng. Nó cung cấp các tùy chọn để xây dựng truy vấn cơ sở dữ liệu, thực thi nó dựa trên cơ sở dữ liệu đích và cuối cùng là tìm nạp kết quả. Lớp DB tương tác với các lớp sau và cung cấp một API cơ sở dữ liệu toàn diện.

  • Database_Connection - Singleton và lớp chính để tương tác với cơ sở dữ liệu

  • Database_Query - Lớp cơ sở, cụ thể để thực hiện truy vấn SQL và tìm nạp kết quả

  • Database_Query_Builder - Lớp cơ sở, trừu tượng để xây dựng truy vấn SQL

  • Database_Query_Builder_Join - Lớp xây dựng các phép nối SQL

  • Database_Query_Builder_Where - Lớp trừu tượng để xây dựng các điều kiện truy vấn SQL

  • Database_Query_Builder_Select - Lớp cụ thể để xây dựng truy vấn chọn SQL

  • Database_Query_Builder_Insert - Lớp trừu tượng để xây dựng truy vấn chèn SQL

  • Database_Query_Builder_Update - Lớp trừu tượng để xây dựng truy vấn cập nhật SQL

  • Database_Query_Builder_Delete - Lớp trừu tượng để xây dựng truy vấn xóa SQL

Sơ đồ sau đây mô tả mối quan hệ giữa các lớp và các phương thức được cung cấp bởi các lớp.

API DB

Chúng ta hãy tìm hiểu các phương thức quan trọng nhất có sẵn trong lớp DB trong phần này.

ví dụ

  • Purpose- Tạo và trả về thể hiện Database_Connection mới .

  • Parameter -

    • $db - Tên kết nối cơ sở dữ liệu được xác định trong tệp cấu hình, tùy chọn.

  • Returns- Trả về đối tượng Database_Connection

Ví dụ,

$db = DB::instance(); $db = DB::instance('test');

truy vấn

  • Purpose - Chuẩn bị câu lệnh SQL được cung cấp và trả về đối tượng Database_Query, đối tượng này có thể được sử dụng để chèn, cập nhật, xóa hoặc tìm nạp dữ liệu từ cơ sở dữ liệu.

  • Parameter -

    • $query - Câu lệnh SQL, có thể chứa trình giữ chỗ;

    • $type - Kiểu SQL, tùy chọn (DB :: SELECT, DB :: INSERT, DB :: UPDATE và DB :: DELETE)

  • Returns- Trả về đối tượng Database_Query

Ví dụ,

$query = DB::query('SELECT * FROM 'employees'');

last_query

  • Purpose - Để nhận được truy vấn được thực thi cuối cùng

  • Parameter - Không có

  • Returns - Trả về truy vấn được thực thi cuối cùng

Ví dụ,

$employees = DB::Select('Select * from 'employee''); 
$sql = DB::last_query();

lựa chọn

  • Purpose - Tạo phần chọn của truy vấn

  • Parameter -

    • $columns - Danh sách tên cột cơ sở dữ liệu

  • Returns - Trả về đối tượng Database_Query_Builder_Select

Ví dụ,

$query = DB::select(); // Select * $query = DB::select('id', 'name'); // Select id, name

select_array (DB)

Tương tự như select ngoại trừ chúng ta có thể gửi các cột dưới dạng mảng.

$query = DB::select_array(array('id', 'name')); // Select id, name

chèn

  • Purpose - Tạo phần chèn của truy vấn

  • Parameter -

    • $table_name - tên của bảng cơ sở dữ liệu;

    • $columns - mảng các cột trong bảng

  • Returns - Trả về đối tượng Database_Query_Builder_Insert

Ví dụ,

$query = DB::insert('employee');  // Insert into employee 
$query = DB::insert('employee', array('id', 'name')); // Insert into employee (id, name)

cập nhật

  • Purpose - Tạo phần cập nhật của truy vấn

  • Parameter -

    • $table_name - tên của bảng cơ sở dữ liệu

  • Returns - Trả về đối tượng Database_Query_Builder_Update

Ví dụ,

$query = DB::update('employee'); // update `employee`

xóa bỏ

  • Purpose - Tạo phần xóa của truy vấn

  • Parameter -

    • $table_name - tên của bảng cơ sở dữ liệu

  • Returns - Trả về đối tượng Database_Query_Builder_Delete

Ví dụ

$query = DB::delete('employee');  // delete from 'employee'

API truy vấn

Database_Querycung cấp một tùy chọn để thiết lập kết nối cơ sở dữ liệu, thực hiện truy vấn và tìm nạp kết quả dưới dạng mảng hoặc đối tượng liên kết. Hãy để chúng tôi xem các phương thức được cung cấp bởi lớp Database_Query.

set_connection

  • Purpose - Để đặt cơ sở dữ liệu (chi tiết kết nối cơ sở dữ liệu) để thực hiện truy vấn

  • Parameter - $ db - tên kết nối cơ sở dữ liệu

  • Returns- Trả về đối tượng Database_Query

Ví dụ,

$query = DB::query('DELETE * FROM employee', DB::DELETE); $query->set_connection('2nd-db');

param

  • Purpose - Để đặt giá trị của tham số được xác định trong đối tượng Truy vấn

  • Parameter -

    • $param - tên tham số;

    • $value - giá trị của tham số

  • Returns- Trả về đối tượng Database_Query

Ví dụ,

// set some variables
$table = 'employee'; $id = 1;
$name = 'Jon'; // don't use $query = DB::query('SELECT * FROM '.$table.'. WHERE id = '.$id.' AND name = "'.$name.'"'); // but use $query = DB::query('SELECT * FROM :tablename WHERE id = :id AND name = :name');
$query->param('tablename', 'employee'); $query->param('id', $id); $query->param('name', $name);

Phương pháp tương tự

parameters là một đối tượng tương tự ngoại trừ nó cung cấp tùy chọn để cung cấp nhiều giá trị cùng một lúc.

$query->parameters (array( 
   'tablename' => $table, 'id' => $id, 
   'name' => $name 
});

trói buộc

  • Purpose - Đặt một biến thành tham số được xác định trong đối tượng Truy vấn

  • Parameter -

    • $param - tên tham số

    • $var - biến để liên kết tham số với

  • Returns- Trả về đối tượng Database_Query

Ví dụ,

// bind a query parameter 
$table = 'employee'; 
$query = DB::query('DELETE * FROM :tablename', DB::DELETE); $query->bind('tablename', $table); // update the variable $table = 'employee_salary'; 

// DELETE * FROM `employee_salary`; 
$sql = $query->compile();

biên dịch

  • Purpose - Để biên dịch đối tượng truy vấn được xác định thành truy vấn SQL

  • Parameter -

    • $db - chuỗi kết nối, tùy chọn

  • Returns -

Ví dụ,

// assign a value to a query parameter 
$table = 'employee'; 
$query = DB::query('DELETE * FROM :tablename', DB::DELETE); $query->param('tablename', $table); // compile the query, returns: DELETE * FROM employee $sql = $query->compile();

hành hình

  • Purpose - Để thực hiện truy vấn được xác định trong đối tượng Truy vấn và trả về kết quả

  • Parameter -

    • $db - tên kết nối cơ sở dữ liệu

  • Returns - Trả về kết quả

Ví dụ,

// assign a value to a query parameter 
$table = 'employee'; $query = DB::query('DELETE * FROM :tablename', DB::DELETE); 
$query->param('tablename', $table);  

// execute the query 
$query->execute();

as_assoc

  • Purpose - Đặt kiểu trả về là mảng kết hợp thay vì đối tượng

  • Parameter - Không có

  • Returns - Trả về đối tượng hiện tại

Ví dụ,

$query = DB::query('SELECT * FROM employee', DB::SELECT); 
$result = $query->as_assoc()->execute(); 
foreach ($result as $row) { 
   echo $row['id']; 
}

as_object

  • Purpose - Đặt kiểu trả về là đối tượng thay vì mảng kết hợp

  • Parameter - Không có

  • Returns - Trả về đối tượng hiện tại

Ví dụ,

$query = DB::query('SELECT * FROM employee', DB::SELECT); 
$result = $query->as_object()->execute(); 
foreach ($result as $row) { 
   echo $row->id; } // have ORM model objects return instead $result = $query->as_object('Model_Employee')->execute();

API trình tạo truy vấn

Các lớp dựa trên trình tạo truy vấn (Query_Builder) cung cấp các tùy chọn để tạo các truy vấn SQL động. Nó có bốn lớp, mỗi lớp để chọn (Query_Builder_Select) , chèn (Query_Builder_Insert) , cập nhật (Query_Builder_Update) và xóa (Query_Builder_Delete) các truy vấn. Các lớp này có nguồn gốc từ lớp Query_Builder_Where (tùy chọn tạo điều kiện), bản thân lớp này có nguồn gốc từ Query_Builder , cơ sở của tất cả các lớp.

Chúng ta hãy xem xét các phương thức được cung cấp bởi lớp Query_Builder.

lựa chọn

  • Purpose - Để tạo các cột của các truy vấn đã chọn.

  • Parameter -

    • $columns - danh sách các cột, tùy chọn

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$query = DB::select('name') // select `name` $query = DB::select(array('first_name', 'name')) // select `first_name` as `name`

từ

  • Purpose - Để tạo bảng chi tiết của các truy vấn được chọn

  • Parameter -

    • $tables - danh sách các bảng

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$query = DB::select('name')->from('employee') // select `name` from `employee`

Ở đâu

  • Purpose - Để tạo các điều kiện của các truy vấn chọn, chèn và cập nhật

  • Parameters -

    • $column - tên cột hoặc mảng ($ column, $ alias);

    • $op - toán tử logic, =,! =, IN, BETWEEN và LIKE, tùy chọn;

    • $value - giá trị cột

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$query = DB::select('name')->from('employee')  
$query = $query->where('name', '=', 'Jon'); 
// select `name` from `employee` where `name` = `Jon`;

Phương pháp tương tự

Các phương thức tương tự là where_open (), and_where_open (), or_where_open (), where_close (), and_where_close (), or_where_close (). Chúng tương tự như các phương thức where () ngoại trừ việc chúng thêm các từ khóa và dấu ngoặc nhọn xung quanh các điều kiện. Sau đây là một mã mẫu.

$query = DB::select('*')->from('employee'); $query->where('email', 'like', '%@gmail.com'); 
$query->or_where_open(); $query->where('name', 'Jon'); 
$query->and_where('surname', 'Peter'); $query->or_where_close();  
// SELECT * FROM `employee` WHERE `email` LIKE "%gmail.com" OR 
   (`name` = "Jon" AND `surname` = "Peter")

tham gia

  • Purpose - Để tạo kết hợp bảng của các truy vấn được chọn

  • Parameters -

    • $table - tên bảng hoặc mảng ($ table, $ alias);

    • $type - kiểu tham gia (LEFT, RIGHT, INNER, v.v.,)

  • Returns - Trả về phiên bản hiện tại

Thí dụ

$query = DB::select('name')->from('employee')->join('employee_salary') 
// select `name` from `employee` JOIN `employee_salary`

trên

  • Purpose - Để tạo điều kiện kết hợp trong các truy vấn được chọn

  • Parameters -

    • $c1 - tên bảng hoặc tên bảng có bí danh trong mảng;

    • $op - toán tử logic;

    • $c2 - tên bảng hoặc tên bảng có bí danh trong mảng

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$query = DB::select('name')->from('employee')->join('employee_salary') $query = $query->on('employee.employee_id', '=', 'employee_salary.employee_id') 
// select `name` from `employee` JOIN `employee_salary` on 
// `employee.employee_id` = `employee_salary.employee_id`

Phương pháp tương tự

Các phương thức liên quan là and_on () và or_on (). Chúng tương tự như on () ngoại trừ việc chúng thêm từ khóa và dấu ngoặc nhọn xung quanh các phép nối.

group_by

  • Purpose - Để tạo nhóm theo truy vấn

  • Parameter - $columns - Tên cột để nhóm kết quả

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$query = DB::select('name')->from('employee') $query = $query->group_by('name'); 
// select `name` from `employee` group by `name`

đang có

  • Purpose - Để tạo nhóm theo điều kiện của truy vấn SQL

  • Parameter - $column - tên cột hoặc mảng ( $column, $bí danh); $op - toán tử logic, =,! =, IN, BETWEEN và LIKE, tùy chọn; $value - giá trị cột

  • Returns - Trả về phiên bản hiện tại

Thí dụ

$query = DB::select('name')->from('employee') $query = $query->group_by('name'); $query = $query->having('name', '!=', 'Jon');
// select `name` from `employee` group by `name` having `name` != `Jon`

Phương pháp tương tự

Các phương thức tương tự là have_open (), and_having_open (), or_having_open (), Have_close (), and_having_close (), or_having_close (). Chúng tương tự như các phương thức have () ngoại trừ việc chúng thêm các từ khóa và dấu ngoặc nhọn xung quanh các điều kiện.

cài lại

  • Purpose - Để đặt lại truy vấn

  • Parameter - Không có

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$query = DB::select('name')->from('employee')  
$query->reset() $query = DB::select('name')->from('employee_salary') 
// select `name` from `employee_salary`

Lớp DBUtil

Lớp DBUtil cung cấp một tùy chọn để quản lý và thực hiện các hoạt động cơ sở dữ liệu thông thường. Một số phương pháp quan trọng như sau:

  • set_connection - Đặt kết nối mặc định
DBUtil::set_connection('new_database');
  • create_database - Tạo cơ sở dữ liệu.
DBUtil::create_database('my_database');
  • drop_database - Đánh rơi cơ sở dữ liệu.
DBUtil::drop_database('my_database');
  • table_exists - Kiểm tra xem một bảng nhất định có tồn tại hay không.
if(DBUtil::table_exists('my_table')) { 
   // Table exists 
} else { 
   // Table does NOT exist, create it! 
}
  • drop_table - Làm rơi một bảng.
DBUtil::drop_table('my_table');
  • create_table - Tạo một bảng.
\DBUtil::create_table ( 
   'users', 
   array ( 
      'id' => array('type' => 'int', 'auto_increment' => true), 
      'name' => array('type' => 'text'), 
   ), 
);

Bộ công cụ Orm

FuelPHP cung cấp lớp cơ sở dữ liệu nâng cao sử dụng khái niệm ORM dựa trên Active record pattern. Bộ công cụ được bao gồm trong ứng dụng nhưng không được cấu hình theo mặc định. Nó được đóng gói dưới dạng một gói và tên gói là orm. Chúng tôi có thể thêm cấu hình sau vào tệp cấu hình chính,fuel/app/config/config.php để tải bộ công cụ orm.

'always_load' => array ( 
   'packages' => array (
      'orm', 
   ), 
),

Tạo mô hình

Orm cung cấp lớp mô hình cơ sở Orm \ Model. Chúng tôi cần mở rộng mô hình của mình với mô hình orm để sử dụng các tính năng ORM. Sau đây là một mã mẫu.

class Model_Employee extends Orm\Model {}

Cấu hình

Orm cung cấp một tập hợp các cài đặt để định cấu hình mô hình sử dụng các tính năng ORM. Chúng như sau:

connection- Đặt thuộc tính _connection tĩnh trong mô hình để chỉ định tên kết nối.

class Model_Employee extends Orm\Model { 
   protected static $_connection = "production"; 
}

table name- Đặt thuộc tính static _table_name trong model để chỉ định tên bảng của bảng phụ trợ.

class Model_Employee extends Orm\Model { 
   protected static $_table_name = 'employee'; 
}

primary key- Đặt một thuộc tính _primary_key tĩnh trong mô hình để chỉ định khóa chính của bảng phụ trợ.

class Model_Employee extends Orm\Model { 
   protected static $_primary_key = array('id'); 
}

Columns- Đặt thuộc tính _properties tĩnh trong mô hình để chỉ định các cột của bảng phụ trợ. Nó hỗ trợ data_type, label, validation, form elememts, v.v.

class Model_Employee extends Orm\Model { 
   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' 
         ), 
      ),  
   ); 
}

Conditions- Đặt thuộc tính static _conditions để thiết lập các điều kiện và sắp xếp theo các tùy chọn.

class Model_Employee extends Orm\Model { 
   protected static $_conditions = array ( 
      'order_by' => array('id' => 'desc'), 
      'where' => array ( 
         array('is_active', > true), 
      ), 
   ); 
}

Observers- Orm cung cấp hệ thống sự kiện dựa trên người quan sát để thêm hành vi vào các sự kiện cụ thể. Để thêm một hành vi, trước tiên hãy đặt thuộc tính _observers trong mô hình. Sau đó, xác định hành vi như một lớp và đặt nó trong thuộc tính _observers cùng với các sự kiện. Nếu không có sự kiện nào được chỉ định, hành vi sẽ được gọi cho tất cả các sự kiện. Chúng tôi cũng có thể chỉ định nhiều hành vi.

class Model_Employee { 
   protected static $_observers = array ( 
      'example',  // will call Observer_Example class for all events 
      'Orm\\Observer_CreatedOn' => array ( 
         'events' => array('before_insert'),  
         // will only call Orm\Observer_CreatedOn at before_insert event 
      ) 
   ); 
}

Tạo nên

Khi chúng tôi cấu hình mô hình, chúng tôi có thể bắt đầu sử dụng các phương pháp ngay lập tức. Orm cung cấp một phương thức lưu để lưu đối tượng vào cơ sở dữ liệu. Chúng ta có thể đặt dữ liệu bằng cách sử dụng các thuộc tính được định cấu hình như sau:

// option 1 
$new = new Model_Employee(); $new->name = 'Jon'; 
$new->save(); // option 2, use forge instead of new $new = Model_Employee::forge();
$new->name = 'Jon'; $new->save();  

// option 3, use array for properties 
$props = array('name' => 'Jon'); $new = Model_Employee::forge($props); $new>save();

Đọc

Orm cung cấp một phương thức, tìm để lấy dữ liệu từ cơ sở dữ liệu và liên kết vào đối tượng. phương thức tìm hoạt động tùy thuộc vào tham số đầu vào. Hãy để chúng tôi xem xét các tùy chọn khác nhau -

by primary key - Chỉ định khóa chính trả về bản ghi bằng cách khớp với khóa chính của bảng được cấu hình.

$employee = Model_Employee::find(1);

first / last record- Chỉ định 'đầu tiên' hoặc 'cuối cùng' sẽ tìm nạp bản ghi đầu tiên hoặc bản ghi cuối cùng tương ứng. Chúng tôi cũng có thể chuyển đơn hàng theo tùy chọn.

$entry = Model_Employee::find('first'); 
$entry = Model_Article::find('last', array('order_by' => 'id'));

All- Chỉ định 'tất cả' sẽ lấy tất cả các bản ghi từ bảng đã cấu hình. Chúng tôi có thể chỉ định thứ tự theo tùy chọn cũng như điều kiện.

$entry = Model_Employee::find('all');  
$entry = Model_Article::find ('all', array ( 
   'where' => array ( 
      array ('name', 'Jon'), 
   ), 
   'order_by' => array ('id' => 'desc'), 
));

Chúng ta có thể sử dụng API truy vấn của bộ công cụ cơ sở dữ liệu cơ bản cùng với mô hình cho tùy chọn tìm kiếm nâng cao như sau.

$query = Model_Employee::query()->where('category_id', 1)->order_by('date', 'desc');
$number_of_employees = $query->count(); 
$latest_employee = $query->max('id'); 
$young_employee = $query->min('age'); 
$newest_employee = $query->get_one(); 
$employees = $query->limit(15)->get();

Cập nhật

Cập nhật mô hình cũng giống như tạo, ngoại trừ thay vì tạo một mô hình mới, chỉ cần tìm nạp mô hình được cập nhật bằng phương thức find, cập nhật thuộc tính và sau đó gọi phương thức lưu như sau.

$entry = Model_Employee:find(4); $entry->name = 'Peter'; 
$entry->save();

Xóa bỏ

Orm cung cấp một phương pháp xóa để xóa mô hình. Chỉ cần tìm nạp đối tượng và gọi phương thức xóa.

$entry = Model_Employee:find(4); 
$entry->delete();

Ví dụ làm việc

Hãy tạo một ví dụ làm việc trong chương này để hiểu mô hình và cơ sở dữ liệu.

Tạo cơ sở dữ liệu

Tạo cơ sở dữ liệu mới trong máy chủ MySQL, sử dụng lệnh sau.

create database tutorialspoint_fueldb

Sau đó, tạo một bảng bên trong cơ sở dữ liệu bằng lệnh sau.

create table employee(id int primary key, name varchar(20), age int not null);

Định cấu hình cơ sở dữ liệu

Hãy để chúng tôi định cấu hình cơ sở dữ liệu bằng cách sử dụng tệp cấu hình cơ sở dữ liệu, * fuel / app / config / db.php. Thêm các thay đổi sau để kết nối máy chủ MySQL.

<?php  
   return array ( 
      'development' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_fueldb', 
            'username'       => 'root', 
            'password'       => 'pass', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ),  
      
      'production' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_fueldb', 
            'username'       => 'root', 
            'password'       => 'pass', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ), 
   );

Bao gồm gói ORM

Cập nhật tệp cấu hình chính, fuel/app/config/config.php để bao gồm gói ORM bằng cách thêm cấu hình sau.

'always_load' => array ( 
   'packages' => array ( 
      'orm' 
   ), 
),

Bây giờ, ORM đã được bật trong ứng dụng của bạn

Tạo mô hình nhân viên

Tạo một mô hình mới, Nhân viên trong thư mục mô hình “fuel/app/classes/model”. Nó được định nghĩa như sau.

Employee.php

<?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', 
            'form' => array (
               'type' => 'text' 
            ), 
         ),  
         
         'age' => array ( 
            'data_type' => 'int', 
            'label' => 'Employee Age', 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
      ); 
   }

Tạo hành động

Tạo hành động mới, action_model trong Bộ điều khiển nhân viên đặt tại fuel/app/classes/controller/employee.php như sau.

class Controller_Employee extends Controller { 
   public function action_model() { 
      
      // db based sql command to delete all employees 
      $query = db::query('delete from `employee`'); 
      $query->execute('production'); // orm based query to add new employees $model = new model_employee(); 
      $model->name = "john"; $model->age = 25; 
      $model->save(); $model = new model_employee(); 
      $model->name = "peter"; $model->age = 20; 
      $model->save(); // orm based query to fetch all employee data $data = array(); 
      $data['emps'] = model_employee::find('all'); return response::forge(view::forge('employee/model', $data)); 
   } 
}

Tạo chế độ xem

Bây giờ, hãy tạo một tệp dạng xem model.php Đặt vị trí tại “fuel/app/views/employee”. Thêm các thay đổi sau vào tệp.

<ul> 
   <?php 
      foreach($emps as $emp) {  
   ?> 
   <li><?php echo $emp['name']; ?></li> 
   
   <?php 
   } 
   ?> 
</ul>

Bây giờ, hãy yêu cầu URL, http://localhost:8080/employee/model và nó sẽ tạo ra kết quả sau.

Kết quả

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

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

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

  • Input lớp 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, biến máy chủ và tác nhân người dùng.

Trong chương này, hãy cùng chúng tôi tìm hiểu Form programming trong FuelPHP.

Hình thức

Như đã thảo luận trước đó, lớp Form cung cấp các phương thức để tạo 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:

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

  • $hidden - mảng 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'));

đóng()

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 tham 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 dưới dạng mảng

echo Form::input('name', 'jon', array('style' => 'border: 20px;'));

yếu tố nhãn

labeltạo phần tử nhãn html. Nó có ba tham số sau,

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

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

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

echo Form::label('Employee Name', 'employee_name');

ẩn

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

mật khẩu

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

Đài

radiotương tự như phương thức nhập, ngoại trừ nó đặt kiểu của phần tử đầu vào thành radio. Nó có bốn tham 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 - mặt hàng đã được kiểm tra hay chưa (đúng / sai)

  • $attributes - thuộc tính của phần tử đầu vào dưới dạng 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

checkboxtương tự như phương thức nhập, ngoại trừ nó đặt kiểu của phần tử đầu vào thành hộp kiểm. Nó có bốn tham 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 - mặt hàng đã được kiểm tra hay chưa (đúng / sai)

  • $attributes - thuộc tính của phần tử đầu vào dưới dạng 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

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

textarea

textareatạo phần tử html textarea. Nó có ba tham số sau,

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

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

  • $attributes - 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

selecttạo một phần tử chọn HTML. Nó có bốn tham số sau:

  • $field - tên của phần tử được chọn

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

  • $options- 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 dưới dạng mảng

echo Form::select ( 
   'country',  
   'none',  
   array ( 
      'none'  => 'None', 
      'asia'  => array ( 
         'in' > 'India', 
         'cn' => 'China' 
      ), 
      
      'us' => 'United States' 
   ) 
);

Gửi đi

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

cái nút

buttontạo phần tử nút html. Nó có ba tham số sau,

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

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

  • $attributes - 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

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

fieldet_open

fieldset_open tạo tập trường html và các phần tử chú giải. Nó có hai tham số sau:

  • attributes - thuộc tính của phần tử tập trường dưới dạng mảng

  • legend - tên của huyền thoại để 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'
));

fieldet_close

fieldset_close tạo thẻ đóng tập 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 chi tiết biểu mẫu. Một số phương pháp quan trọng như sau:

đi tiểu

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

method trả về phương thức HTTP được sử dụng trong yêu cầu

echo Input::method() // "POST"

được

getcho 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

postcho 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ừ $ _GET, $_POST, $_PUT hoặc $ _DELETE biến. 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

filecho phép đọc cá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

protocol 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ả lại địa chỉ IP thực (nếu máy khách đứng sau proxy) qua đó yêu cầu được thực hiện.

echo Input::real_ip() // returns "10.76.12.1" (local private IP Address)

người phục vụ

servercho 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

referrertrả về liên kết giới thiệu từ biến $ _SERVER. Đây là một phương pháp tắt để lấy liên kết giới thiệu http của yêu cầu hiện tại.

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

user_agenttrả về tác nhân người dùng từ biến $ _SERVER. Đây là một phương thức tắt để lấy 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_stringtrả về chuỗi truy vấn từ biến $ _SERVER. Nó là một phương thức tắt để lấy chuỗi truy vấn của yêu cầu hiện tại.

tiêu đề

headerstrả về tiêu đề cụ thể hoặc tất cả. Nó có hai tham số sau:

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

extension 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 bằng cách sử dụng lớp Biểu mẫu và Đầu vào.

Tạo biểu mẫu

Tạo hành động mới, get_add trong bộ điều khiển nhân viên như sau.

public function get_add() { 
   return Response::forge(View::forge('employee/add')); 
}

Bây giờ, thêm chế độ xem cho action, fuel / app / views / worker / 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. FuelPHP 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 / worker / add sẽ hiển thị biểu mẫu sau.

Quy trình biểu mẫu

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

Tại đây, chúng tôi đã được chuyển đến trang danh sách nhân viên, khi người dùng nhập dữ liệu sẽ đượ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.

Liệt kê 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, fuel/app/views/employee/list 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ờ, hãy 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.

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

Validationlà một trong những tác vụ thường xuyên và lặp lại nhiều nhất trong ứng dụng web. Người dùng nhập dữ liệu cần thiết vào biểu mẫu và gửi nó. Sau đó, ứng dụng web cần xác thực dữ liệu trước khi xử lý dữ liệu. Ví dụ: người dùng nhập dữ liệu nhân viên và post_action cần xác thực trước khi lưu vào cơ sở dữ liệu. FuelPHP cung cấp một lớp thực sự đơn giản, Xác thực cho mục đích này.

Trong FuelPHP, khái niệm xác thực rất đơn giản và nó cung cấp nhiều phương thức khác nhau thông qua lớp Xác thực để xác thực đúng biểu mẫu. Sau đây là quy trình xác thực,

Step 1 - Tạo đối tượng xác thực mới bằng cách sử dụng forge phương pháp.

$val = Validation::forge();

Step 2 - Thêm các trường cần được xác nhận bằng cách sử dụng phương thức thêm.

$val->add('name', 'Employee name');

Step 3 - Đặt các quy tắc xác thực cho các trường đã thêm bằng cách sử dụng add_rule phương pháp.

$val->add('name', 'Employee name')->add_rule('required'); 
$val->add('age', 'Employee age')->add_rule('required') 
   ->add_rule('numeric_min', 20) 
   ->add_rule('numeric_max', 30);

Step 4 - Gọi phương thức run để xác thực dữ liệu.

// run validation on just post 
if ($val->run()) { 
   // success 
} else { 
   // falier 
}

Step 5 - Sử dụng validated và error để lấy các trường hợp lệ và không hợp lệ tương ứng.

$vars = $val->validated(); 
$vars = $val->error();

Quy tắc

FuelPHP chứa rất nhiều quy tắc để xác thực và cũng cung cấp một tùy chọn để tạo các quy tắc mới. Các quy tắc được hỗ trợ bởi lớp Xác thực như sau,

  • required - Giá trị được nhập

  • required_with- Đặt trường khác làm trường đồng hành. Nếu trường được đặt, thì các trường đồng hành cũng cần được đặt

  • match_value - Đặt giá trị được khớp với giá trị của trường

  • match_pattern - Đặt giá trị được so khớp dưới dạng biểu thức chính quy với giá trị của trường

  • match_field - Đặt giá trị của trường khác làm giá trị được khớp với giá trị của trường

  • match_collection - Đặt giá trị được so khớp dưới dạng tập hợp với giá trị của trường

  • min_length - Đặt độ dài tối thiểu của giá trị trường

  • max_length - Đặt độ dài tối đa của giá trị trường

  • exact_length - Đặt độ dài chính xác của giá trị trường

  • valid_date - Đặt giá trị của trường thành một ngày hợp lệ

  • valid_email - Đặt giá trị của trường thành một email hợp lệ

  • valid_emails - Đặt giá trị của trường thành các email hợp lệ, được phân tách bằng dấu phẩy

  • valid_url - Đặt giá trị của trường thành một URL hợp lệ

  • valid_ip - Đặt giá trị của trường thành IP hợp lệ

  • numeric_min - Đặt giá trị nhỏ nhất của giá trị trường

  • numeric_max - Đặt giá trị lớn nhất của giá trị trường

  • numeric_between - Đặt giá trị nhỏ nhất và lớn nhất của giá trị trường

  • valid_string - Tương tự như regex nhưng đơn giản hơn

$val->add('username', 'User name')->add_rule('valid_string', array('alpha, dots');

Ở đây, alpha đề cập đến các ký tự trong bảng chữ cái và dấu chấm đề cập đến (.). Chuỗi hợp lệ chỉ là chuỗi chứa ký tự chữ cái và (.). Các tùy chọn khác là chữ hoa, chữ thường, đặc biệt, số, dấu cách, v.v.

Ví dụ làm việc

Chúng tôi có thể cập nhật tính năng thêm nhân viên để bao gồm xác thực. Chỉ cần cập nhậtpost_add phương pháp của kiểm soát viên như sau.

public function post_add() { 
   $val = Validation::forge(); 
   $val->add('name', 'Employee name')->add_rule('required'); $val->add('age', 'Employee age')->add_rule('required')
      ->add_rule('numeric_min', 20) 
      ->add_rule('numeric_max', 30);  
   
   if ($val->run()) { $name = Input::post('name'); 
      $age = Input::post('age'); $model = new model_employee(); 
      $model->name = $name; 
      $model->age = $age; 
      $model->save();  
      Response::redirect('employee/list'); 
   } else { 
      Response::redirect('employee/add'); 
   } 
}

Ở đây, chúng tôi đã chỉ định namevà tuổi theo các trường bắt buộc. Cácagecần phải từ 20 đến 30. Nếu cả hai quy tắc hợp lệ, thì dữ liệu nhân viên sẽ được lưu và chuyển hướng đến trang danh sách nhân viên. Nếu không, dữ liệu nhân viên sẽ bị từ chối và được chuyển hướng để thêm trang nhân viên.

FuelPHP cung cấp chương trình biểu mẫu nâng cao thông qua các lớp Fieldset và Fieldset_Field. Fieldsetcung cấp một cách hướng đối tượng để tạo một biểu mẫu. Nó có hỗ trợ đầy đủ cho các mô hình. Nó cũng có hỗ trợ tích hợp cho xác thực phía máy khách và phía máy chủ. Để tạo một biểu mẫu chính thức, chỉ cần tạo một mô hình với biểu mẫu và cài đặt xác thực phù hợp là đủ. Hãy cùng chúng tôi 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ủa Fieldset_Fieldcác đối tượng. Fieldset_Field xác định mục nhập riêng lẻ của một biểu mẫu như tên, họ, v.v. cùng với các xác nhận. Lớp Fieldset có các phương thức để thêm / sửa / loại bỏ 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 các trường từ mô hình đã cho.Fieldsetsử dụng các lớp Biểu mẫu và Xác thực trong nền để thực hiện công việc thực sự. Chúng ta hãy xem một số phương thức quan trọng của lớp Fieldset.

làm giả

forgetạo một thể hiện Fieldset mới. Nó có hai tham số sau:

  • $name - mã định danh cho tập trường

  • $config- mảng cấu hình. Các tùy chọn có thể có là validation_instanceform_instance. validation_instance có thể có đối tượng Validationform_instance có thể có đối tượng Form.

$employee_form = Fieldset::forge('employee');

ví dụ

instance trả về cá thể Fieldset đã tạo trước đó bằng mã định danh.

$employee_form = Fieldset::instance('employee');

get_name

Nhận định danh của cá thể trường.

$employee_form = Fieldset::forge('employee'); 
$name = $employee_form->get_name();

thêm vào

addtạo một thể hiện Fieldset_Field mới và thêm nó vào tập trường hiện tại. Nó chứa bốn tham số sau,

  • $name - tên trường

  • $label - nhãn cho trường

  • $attributes - Thuộc tính thẻ HTML

  • $rules - 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ố để chỉ định trường mà trước đó trường mới 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ỏ

delete xóa trường được chỉ định khỏi tập trường.

$employee_form->delete('employee_firstname');

cánh đồng

field lấy tất cả các trường hoặc một trường được chỉ định từ tập trường.

$fields = $employee_form->field(); $lastname_field = $employee_form->field('employee_lastname');

xây dựng

buildlà 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'));

kích hoạt

enable bật lại một trường đã bị vô hiệu hóa trước đó.

$employee_form->enable('employee_firstname');

vô hiệu hóa

disable cho phép vô hiệu hóa một trường trong tập trường đang được xây dựng.

$employee_form->disable('employee_firstname');

hình thức

form trả về thể hiện Biểu mẫu của tập trường hiện tại.

$form = employee_form->form();

add_model

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

  • $class - tên lớp

  • $instance - phiên bản 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 tập trường. Orm \ Model có phương thức bắt buộc. 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ú

populate đặt giá trị ban đầu của các trường trong tập trường bằng cách sử dụng cá thể mô hình.

$emp = new Model_Employee(); 
$emp->name = "Jon"; $employee_form->populate($emp);

lặp lại

repopulate giống như điền, ngoại trừ nó sao chép lại các trường trong tập trường.

Thẩm định

validation lấy thể hiện xác thực của tập trường hiện tại.

$validation = $employee_form->validation();

xác thực

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

input

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

error

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 tôi 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 thực cần thiết và thêm 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 thực cho các trường tên và tuổi và thêm một trình quan sát mới để thực hiện xác nhận 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 ra các thuộc tính xác thực đầu vào cần thiết 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 tôi đã tạo biểu mẫu bằng tập trường và gửi biểu mẫu đến dạng xem. Tiếp theo, thêm chế độ xem cho hành động,fuel/app/views/employee/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ị mẫu sau.

Quy trình biểu mẫu

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

Tại đây, chúng tôi đã được chuyển đến trang danh sách nhân viên, khi dữ liệu người dùng nhập vào sẽ được xác thực và lưu vào cơ sở dữ liệu. Nếu không, chúng tôi sẽ được hiển thị lại biểu mẫu.

Tạo biểu mẫu

Bây giờ, hãy yêu cầu URL, http://localhost:8080/employee/addvà 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.

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.

Nếu dữ liệu đã vượt qua xác thực phía máy khách và 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.

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. FuelPHP cung cấp một lớp học đặc biệt,Uploadđể xử lý việc tải tệp lên. Hãy để chúng tôi tìm hiểu cách tải tệp lên bằng lớp Tải lên trong chương này.

Cấu hình

Lớp tải lên có thể được định cấu hình bằng tệp cấu hình riêng biệt, fuel/app/config/upload.php. Các mục cấu hình quan trọng như sau:

  • max_size- Đặt kích thước tối đa của tệp được tải lên. “0” là kích thước tải lên không giới hạn

  • ext_whitelist - Đặt phần mở rộng tệp được phép

  • ext_blacklist - Đặt phần mở rộng tệp không được phép

  • type_whitelist- Đặt các loại tệp được phép. Ví dụ: “văn bản” cho loại kịch câm “văn bản / thuần túy”

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

  • mime_whitelist- Đặt các loại tệp kịch câm được phép. Ví dụ: “văn bản / thuần túy”

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

  • prefix - Chuỗi thành tiền tố trong tên tệp trong khi lưu tệp đã tải lên máy chủ

  • suffix - Chuỗi thành hậu tố trong tên tệp trong khi lưu tệp đã tải lên máy chủ

  • extension - Phần mở rộng của tệp đã tải lên sẽ được đặt

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

  • overwrite - Có ghi đè lên tệp hiện có trong khi lưu tệp đã tải lên hay không

  • 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 - Có tạo tên 32 ký tự ngẫu nhiên để lưu tệp đã tải lên hay không

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 đã 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 xác định bởi trình duyệt

  • mimetype - Loại tệp được xác định bởi lớp Tải lên

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

  • filename - Tên tệp của tệp đã tải lên

  • extension - Phần mở rộng của tệp đã tải lên

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

  • errors - Mảng lỗi có mã lỗi và thông báo

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

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

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

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

  • errors - Cập nhật mảng lỗi

Bây giờ, chúng ta hãy xem phương pháp Tải lên lớp.

is_valid

is_valid trả về true, nếu bất kỳ tệp hợp lệ nào được người dùng tải lên.

// 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 đã 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 đã tải lên chỉ 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 không thể 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 chỉ 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

quy trình đề cập đến quy trình thực tế thu thập thông tin về tệp được tải lên. Chúng tôi có thể cung cấp 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 xác định trong fuel / app / config / upload.php

Upload::process (array( 
   'auto_rename' => false, 
   'overwrite'   => true 
));

tiết kiệm

save đề cập đến quá trình thực tế lưu tất cả các tệp đã được xác thực vào một vị trí thích hợp. Chúng tôi có thể chỉ định chỉ mục để chỉ lưu 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.

Step 1 - Tạo một tệp, fuel/app/classes/controller/upload.php. Tạo bộ điều khiển tải lên.

<?php 
   class Controller_Upload extends Controller { 
   }

Step 2 - Tạo một hành động mới get_upload.

<?php  
   class Controller_Upload extends Controller { 
      public function get_index() { 
         return \View::forge("upload/index"); 
      } 
   }

Step 3 - Tạo một dạng xem mới cho hành động đã tạo.

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

Step 4 - Tạo một hành động post_action mới để xử lý tệp đã 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); 
            } 
         } 
      } 
   }

Cuối cùng, chạy ứng dụng bằng cách yêu cầu url, http://localhost:8080/upload/index và cố gắng tải tệp lên.

Kết quả

AJAX là một công nghệ hiện đại trong lập trình web. Nó cung cấp các tùy chọn để gửi và nhận dữ liệu trong trang web một cách không đồng bộ mà không cần làm mới trang. Hãy cùng chúng tôi tìm hiểu về lập trình FuelPHP AJAX trong chương này.

Khung FuelPHP cung cấp các tùy chọn để xác định loại yêu cầu có phải là AJAX hay không. Lớp đầu vào có một phương thức,is_ajax()vì mục đích này. Nếu một yêu cầu AJAX được thực hiện,Input::is_ajax phương thức trả về true, nếu không thì false.

Phương pháp này được sử dụng để xử lý một yêu cầu AJAX đúng cách ở phía máy chủ.

if (Input::is_ajax()) {  
   // Ajax request  
} else {  
   // Normal request  
}

Chúng ta có thể sử dụng json_encodeđể trả về phản hồi JSON. Chúng ta có thể kết hợp hai phương pháp này để tạo một ứng dụng web dựa trên AJAX đơn giản và sạch sẽ.

Ví dụ làm việc

Hãy để chúng tôi thêm một trang mới, ajax/index trong ứng dụng nhân viên và cố gắng tìm nạp thông tin nhân viên một cách không đồng bộ.

Step 1 - Tạo một bộ điều khiển mới, Controller_Ajax tại fuel / app / class / controller / ajax.php.

<?php  
   class Controller_Ajax extends Controller { 
   }

Step 2- Tạo một action mới, action_index như sau.

<?php  
   class Controller_Ajax extends Controller { 
      public function action_index() { 
         $emps = model_employee::find('all'); $data = array(); 
         $i = 0; foreach($emps as $emp) { $data[$i] = array(); $data[$i]['name'] = $emp['name']; 
            $data[$i]['age'] = $emp['age']; $i = $i + 1; } if(\Input::is_ajax()) { echo json_encode($data); 
         } else { 
            return \View::forge("ajax/index"); 
         } 
      } 
   }

Ở đây, nếu yêu cầu là AJAX, chúng tôi tìm nạp thông tin sinh viên, mã hóa nó dưới dạng JSON và trả về. Nếu không, chúng tôi chỉ hiển thị chế độ xem tương ứng.

Step 3 - Tạo tệp xem tương ứng, fuel/app/views/ajax/index.php như sau.

<html>
   <head>
      <script language = "javascript" src = "/assets/js/jquery-3.2.1.min.js"></script>
      
      <style>
         .table { border-collapse: collapse; }
         .table th, td {
            border-bottom: 1px solid #ddd;
            width: 250px;
            text-align: left;
            align: left;
         }
      </style>
   </head>
   
   <body>
      <a id = "loademployee" href = "#">Load employee information</a>
      </br> 
      </br>

      <table class = "table">
         <tbody id = "employee">
         </tbody>
      </table>
      
      <script language = "javascript">
         $(document).ready(function() { $("#loademployee").on("click", function(event) {
               $.ajax ({ url: '/ajax/index', type: 'POST', dataType: 'json', async: true, success: function(data, status) { var e = $('<tr><th>Name</th><th>Age</th></tr>');
                     $('#employee').html(''); $('#employee').append(e);
                     
                     for(i = 0; i < data.length; i++) {
                        employee = data[i];
                        var e = $('<tr><td id = "name"></td><td id = "age"></td></tr>'); $('#name', e).html(employee['name']);
                        $('#age', e).html(employee['age']); $('#employee').append(e);
                     }
                  },
                  
                  error : function(xhr, textStatus, errorThrown) {
                     alert('Ajax request failed.');
                  }
               });
            });  
         });
      </script>
   </body>
   
</html>

Ở đây, chúng tôi đã tạo một thẻ liên kết (id: loaderantyee) để tải thông tin nhân viên bằng cách sử dụng lệnh gọi AJAX. Cuộc gọi AJAX được thực hiện bằng JQuery. Sự kiện được đính kèm với thẻ người lao động sẽ kích hoạt khi người dùng nhấp vào nó. Sau đó, nó sẽ tìm nạp thông tin nhân viên bằng lệnh gọi AJAX và tự động tạo mã HTML được yêu cầu.

Step 4 - Chạy ứng dụng.

Cuối cùng, chạy ứng dụng, http://localhost:8000/ajax/index và nhấp vào tab neo Tải thông tin nhân viên.

Kết quả

FuelPHP cung cấp một tính năng tuyệt vời để yêu cầu một hành động bên trong cùng một ứng dụng bằng cách sử dụng Requestlớp học. Đây được gọi là Yêu cầu HMVC. Nó cho phép sử dụng lại logic bộ điều khiển.

Tạo yêu cầu HMVC

Tạo một yêu cầu HMVC đơn giản như tạo một đối tượng yêu cầu với URL được yêu cầu và gọi phương thức thực thi như sau.

$list = Request::forge('employee/list/')->execute(); echo $list;  

$employee = Request::forge('employee/show/1')->execute(array('id' => '1')); echo $employee;

Ví dụ làm việc

Hãy để chúng tôi tạo một bộ điều khiển mới, Controller_HMVC để kiểm tra tính năng HMVC. Tạo một tệp,fuel/app/classes/controller/hmvc.php và đặt mã sau.

<?php 
   class Controller_HMVC extends Controller { 
      public function action_index() { 
         echo Request::forge('employee/list')->execute(); 
      } 
   }

Ở đây, chúng tôi vừa gọi trang nhân viên / danh sách thông qua yêu cầu HMVC và hiển thị kết quả.

Kết quả

Chủ đề được sử dụng để tạo ra nhiều giao diện cho ứng dụng. Nó cung cấp tùy chọn cho người dùng / nhà phát triển để thay đổi giao diện của ứng dụng mà không làm ảnh hưởng đến chức năng của ứng dụng. Một ứng dụng có thể có một hoặc nhiều chủ đề. Mỗi chủ đề nằm trong thư mục riêng của nó. Hãy để chúng tôi tìm hiểu cách tạo chủ đề trong chương này.

Cấu hình chủ đề

FuelPHP cung cấp một tệp cấu hình riêng cho các chủ đề, fuel/app/config/themes.php. Tất cả các cài đặt liên quan đến chủ đề được định cấu hình trong tệp này. Một số cài đặt chủ đề chính như sau:

  • active - Tên của chủ đề hoạt động

  • fallback - Tên của chủ đề dự phòng, nếu chủ đề hoạt động không được tìm thấy

  • paths - Mảng đường dẫn để tìm kiếm và tìm chủ đề

  • assets_folder- Thông thường, nội dung cần phải ở bên trong DOCPATH để có thể truy cập thông qua web. Nó đề cập đến thư mục nội dung cho các chủ đề bên trong DOCPATH

  • view_ext - Mở rộng tệp xem của chủ đề

  • info_file_name - Tệp có thông tin mở rộng về các chủ đề

  • require_info_file - Có yêu cầu tệp thông tin chủ đề, info_file_name hay không

  • use_modules - Có sử dụng mô-đun hiện tại hay không

Cấu hình đơn giản cho tệp chủ đề như sau.

<?php  
   return array ( 
      'active' => 'tpthemes', 
      'fallback' => 'tpthemes', 
      'paths' => array ( 
         APPPATH.'themes', 
      ), 
      'assets_folder' => 'assets', 
      'view_ext' => '.html', 
      'require_info_file' => false, 
      'info_file_name' => 'themeinfo.php', 
      'use_modules' => false, 
   );

Ở đây chúng tôi đã thiết lập,

  • Tên của chủ đề hoạt động và dự phòng dưới dạng tpthemes
  • Đường dẫn của thư mục chủ đề dưới dạng nhiên liệu / ứng dụng / chủ đề /
  • Đường dẫn của thư mục nội dung dưới dạng / public / asset / tpthemes /

Lớp chủ đề

Sau khi cấu hình xong, chúng ta có thể sử dụng lớp Theme do FuelPHP cung cấp để thực hiện chức năng của theme. Hãy cho chúng tôi biết về các phương thức có sẵn trong lớp Chủ đề trong chương này.

ví dụ

phương thức instance cho phép tạo một chủ đề mới. Nó có hai tham số sau,

  • $name - Tên của chủ đề (tùy chọn)

  • $config - Mảng cấu hình chủ đề (giống như đã thấy trong phần cấu hình)

Cả hai thông số đều là tùy chọn. Nếu không có tham số nào được chỉ định, nó sẽ cố gắng lấy chủ đề mặc định từ tệp cấu hình. Nếu tên chủ đề được chỉ định, nó sẽ cố gắng lấy các cài đặt khác từ tệp cấu hình. Nếu cấu hình cũng được chỉ định, thì nó sẽ sử dụng cài đặt do người dùng chỉ định thay vì cài đặt từ tệp cấu hình.

$theme = \Theme::instance(); $theme = \Theme::instance('tpthemes'); 
$theme = \Theme::instance ('mytheme', array ( 
   'active' => 'mytheme', 'view_ext' => '.php'));

làm giả

forge tương tự như instance, ngoại trừ nó chỉ có mảng cấu hình.

$theme = \Theme::forge (array( 
   'active'   => 'tpthemes', 
   'fallback' => 'tpthemes', 
   'view_ext' => '.php', 
));

lượt xem

phương pháp xem sử dụng View::forge()trong nền. Cả hai API đều tương tự nhau ngoại trừ phương pháp xem tìm kiếm tệp chế độ xem trong thư mục chủ đề, fuel / app / themes / tpthemes / thay vì fuel / app / views / folder.

$theme = \Theme::instance(); $view = $theme->view('template/index'); 
// *fuel/app/themes/tpthemes/template/index.php

người thuyết trình

phương pháp trình bày sử dụng Presenter::forge()trong nền. Cả hai API đều tương tự nhau ngoại trừ phương pháp trình bày tìm kiếm tệp chế độ xem trong thư mục chủ đề, fuel / app / themes / tpthemes / thay vì fuel / app / views / folder.

$theme = \Theme::instance(); 
$presenter = $theme->presenter('template/index');

asset_path

Phương thức asset_path trả về đường dẫn đến nội dung được yêu cầu liên quan đến chủ đề hiện được chọn.

$theme = \Theme::instance(); // public/assets/tpthemes/css/style.css $style = \Html::css($theme->asset_path('css/style.css'));

add_path

Phương thức add_path cho phép thêm một đường dẫn chủ đề trong thời gian chạy.

$theme = \Theme::instance(); 
$theme->add_path(DOCROOT.'newthemes');

add_paths

Phương thức add_paths cho phép thêm nhiều đường dẫn chủ đề trong thời gian chạy.

$theme = \Theme::instance();   
$theme->add_path(DOCROOT.'newthemes');

hoạt động

phương thức hoạt động cho phép thiết lập chủ đề hoạt động.

$theme = \Theme::instance(); 
$active = $theme->active('newtheme');

dự phòng

phương pháp dự phòng cho phép thiết lập chủ đề dự phòng.

$theme = \Theme::instance(); $fallback = $theme->fallback('custom');

get_template

phương thức get_template sẽ trả về phiên bản View của mẫu chủ đề hiện đang được tải.

$theme = \Theme::instance(); 
$theme->get_template()->set('body', 'Theme can change the look and feel of your app');

set_template

Phương thức set_template cho phép thiết lập mẫu chủ đề cho trang.

$theme = \Theme::instance(); 
$theme->set_template('layouts/index')->set('body', 'set theme template');

tìm thấy

find trả về true, nếu đường dẫn đến theme được tìm thấy, ngược lại nó trả về false.

$theme = \Theme::instance(); 
$path = $theme->find('newtheme')

tất cả

all method trả về một mảng tất cả các chủ đề trong tất cả các đường dẫn chủ đề.

$theme = \Theme::instance(); $themes = $theme->all();

nhận thông tin

Phương thức get_info trả về một biến cụ thể từ mảng thông tin chủ đề. Nếu không có chủ đề nào được chỉ định, mảng thông tin của chủ đề đang hoạt động sẽ được sử dụng.

$theme = \Theme::instance(); 
$var = $theme->get_info('color', 'green', 'newtheme');

Ở đây, phương thức lấy màu được định nghĩa trong 'newtheme'. Nếu nó không được xác định, thì nó sẽ sử dụng 'xanh lá cây' làm màu mặc định.

set_info

Phương thức set_info đặt một biến trong chủ đề hoạt động hoặc dự phòng.

$theme->set_info('color', 'green', 'fallback');

set_partial

Phương thức set_partial cho phép đặt một phần chế độ xem cho phần được đặt tên trong mẫu trang của bạn. Thông thường, nó được thực hiện thông qua cuộc gọi HMVC.

$theme = \Theme::instance(); 
$theme->set_template('layouts/homepage'); $theme->set_partial('navbar', 'homepage/navbar');

get_partial

Phương thức get_partial cho phép lấy phiên bản dạng xem của một phần đã đặt trước đó trong phần được đặt tên của mẫu trang của bạn.

$theme = \Theme::instance(); $theme->set_partial('sidebar', 'partials/menu'); 
$theme->get_partial('sidebar', 'partials/menu')->set('class', 'menu green');

Ví dụ làm việc

Hãy để chúng tôi thêm hỗ trợ chủ đề trong ứng dụng nhân viên của chúng tôi.

Step 1 - Thêm tệp cấu hình chủ đề mới, fuel / app / config / theme.php với nội dung sau.

<?php  
   return array ( 
      'active' => 'tpthemes',
      'fallback' => 'tpthemes', 
      'paths' => array (APPPATH.'themes', ), 
      'assets_folder' => 'assets', 
      'view_ext' => '.html', 
      'require_info_file' => false, 
      'info_file_name' => 'themeinfo.php', 
      'use_modules' => false, 
   );

Step 2 - Thêm thư mục tài sản mới, công khai / tài sản / tpthemes / css cho chủ đề, tpthemes.

cd /go/to/app/root/path 
mkdir -p public/assets/tpthemes/css

Step 3 - Tải xuống bootstrap mới nhất và đặt bootstrap.min.css dưới public / asset / tpthemes / css

Step 4 - Thêm thư mục mới, tpthemes trong thư mục fuel / app / themes.

cd /go/to/app/root/path   
mkdir -p fuel/app/themes/tpthemes

Step 5 - Thêm mẫu bố cục mới, bootstrap.html trong fuel / app / themes / tpthemes / layout / và thêm mã sau.

<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <title>Theme example</title> 
      <meta charset = "utf-8"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1"> 
      <!-- Bootstrap core CSS --> 
      <?php echo \Theme::instance()->asset->css('bootstrap.min.css'); ?> 
   </head> 
   
   <body> 
      <?php echo $header; ?> 
      <div class = "container"> 
         <div class = "row">
            <div class = "col-sm-12"> 
               <?php echo $content; ?> 
            </div> 
         </div> 
      </div> 
   </body>
   
</html>

Ở đây, chúng tôi đã sử dụng phương thức đối tượng và tài sản của chủ đề để lấy đường dẫn của tệp bootstrap. Chúng tôi đã xác định hai biến, tiêu đề và nội dung.header được định nghĩa để đặt động chi tiết tiêu đề. content được định nghĩa để đặt động nội dung thực của trang.

Step 6 - Thêm mẫu tiêu đề mới, header.php tại fuel / app / themes / tpthemes / partials như sau.

<div class = "jumbotron text-center">
   <h1>Theme support in fuelphp</h1> 
   <p>bootstrap based template</p>  
</div>

Step 7 - Tạo bộ điều khiển mới, ThemeSample tại fuel / app / class / controller / themesample.php và action tại action_index như sau.

<?php  
   class Controller_ThemeSample extends \Controller { 
      public function before() { 
         $this->theme = \Theme::instance(); 
         $this->theme->set_template('layouts/bootstrap'); $header = $this->theme->view('partials/header'); $this->theme->get_template()->set('header', $header); } public function action_index() { $content = $this->theme ->view('themesample/index') ->set('message', 'This data comes from action page'); $this->theme 
         ->get_template() 
         ->set('content', $content); } public function after($response) { 
         if (empty($response) or ! $response instanceof Response) { 
            $response = \Response::forge(\Theme::instance()->render()); } return parent::after($response); 
      } 
   }

Ở đây, chúng tôi đã sử dụng beforeafter phương pháp để khởi tạo chủ đề bằng cách sử dụng các phương thức của Themelớp học. Một số phương thức được sử dụng là instance, get_template, set_template và view.

Step 8 - Cuối cùng, thêm view cho hành động index, index.php tại fuel / app / themes / tpthemes / themesample như sau.

<p>The data comes from *fuel/app/themes/tpthemes/themesample/index.html* file.</p> 
<p> 
   <?php echo $message; ?> 
</p>

Ở đây, chúng tôi đã xác định một biến, thông báo, cần được đặt động trong bộ điều khiển.

Chúng tôi đã tạo một chủ đề mới, tpthemes và sử dụng nó trong ThemeSamplebộ điều khiển. Bây giờ chúng ta hãy kiểm tra kết quả bằng cách yêu cầu URL, http: // localhost: 8080 / themesample / index. Kết quả là như sau.

Mô-đun là một cách tuyệt vời để viết các chức năng web có thể sử dụng lại như blog, album, trò chuyện, v.v. Mô-đun không làm phiền mã khác trong ứng dụng web. Nó sống trong thư mục riêng và âm thầm cung cấp chức năng của nó. Các mô-đun chỉ đơn giản là cùng một bộ điều khiển, mô hình và khung nhìn ngoại trừ việc chúng được nhóm, cấu hình và đặt trong một thư mục đặc biệt. Thông thường, một mô-đun thường nằm trong thư mục con của ứng dụng có tên các mô-đun được đặt tại fuel / app / modules.

Cấu hình mô-đun

Chúng ta có thể xác định đường dẫn mô-đun trong tệp cấu hình ứng dụng chính, fuel / app / config / config.php như sau.

'module_paths' => array ( 
   path/to.’modules'.DS,              // path to application modules 
   path/to.’..’.DS.'globalmods'.DS    // path to our global modules 
),

Không gian tên mô-đun

Trong FuelPHP, mọi mô-đun đều có không gian tên PHP riêng. Đặt không gian tên riêng biệt sẽ sửa lỗi xung đột tên. Ví dụ, một mô-đun nhân viên có thể được đặt trong không gian tên, EmployeeModule như sau.

<?php  
   namespace Employeemodule;  

   class Controller_Employee { 
      //code here 
   }

Mô-đun phải được đặt tên trùng với tên thư mục của mô-đun.

Cấu trúc mô-đun

Chúng ta có thể tạo một mô-đun bằng cách tạo một tên thư mục được xác định trong cấu hình. Tên thư mục xác định tên của mô-đun và tên của không gian tên cho các lớp trong mô-đun.

Cấu trúc của mô-đun như sau:

  • classes
    • controller
    • model
    • view
  • config
  • lang
  • tasks
  • views

Mô-đun có thể có các tệp cấu hình riêng. Nó rất hữu ích trong việc thiết lập định tuyến và nó không làm ảnh hưởng đến cấu hình ban đầu của ứng dụng. Một khái niệm quan trọng khác là, lớp mô-đun có thể được sử dụng lại bằng cách tải mô-đun trong phần cấu hình always_load như sau.

'always_load => array ( 
   'modules' => array('employeemodule'), 
),

Ngoài ra, các mô-đun có thể được tải và sử dụng ngay lập tức mà không cần cấu hình như sau.

Module::load('employeemodule');  
\Employeemodule\Myclass::mymethod('params');

Các gói tương tự như các mô-đun trong việc sử dụng lại mã nhưng khác ở những cách sau,

  • Nó không ánh xạ tới các URL web
  • Nó không thể tiếp cận được thông qua yêu cầu HMVC

Tóm lại, các gói không phải là các chức năng web trực tiếp như blog, album, v.v. Thay vào đó, nó là một thư viện các chức năng được nhóm lại với nhau như xử lý email, tạo tài liệu, tạo biểu đồ, xác thực, v.v. giúp phát triển web nhanh hơn ứng dụng.

Tạo gói

Để tạo một gói, trước tiên chúng ta cần sắp xếp mã nguồn được chỉ định như sau.

/fuel 
   /packages 
      /package (root directory of package) 
         /bootstrap.php 
      /classes 
         /our.php 
      /classes.php 
         /here.php 
      /config 
         /config.php 
         /and_so_on

Cấu trúc của gói có hai tệp cụ thể của gói, tệp config.php và bootstrap.php. Mục đích của tệp cấu hình là nhóm cấu hình của gói trong chính thư mục gói mà không làm ảnh hưởng đến ứng dụng chính. Mục đích của tệp bootstrap là thiết lập không gian tên để trình tải tự động tải nó đúng cách.

Một số cách để đặt không gian tên như sau,

Autoloader::add_namespace('Mypackage', __DIR__.'/classes/'); 
Autoloader::add_core_namespace('Mypackage'); 
Autoloader::add_core_namespace('Mypackage', true); 
Autoloader::add_classes (array( 
   'Mypackage\\Classname' => __DIR__.'/classes/classname.php', 
   'Mypackage\\Anotherclass' => __DIR__.'/classes/anotherclass.php', 
));

Khi tệp bootstrap được định cấu hình đúng cách và các gói được tải vào ứng dụng, chúng ta có thể sử dụng nó như sau.

$instance = new Myclass; 
$instance = new Mynamespace\Myclass;

Cài đặt gói

Các gói thường được đặt trong thư mục Nhiên liệu / gói. Theo mặc định, các gói sau được cài đặt,

  • auth - Gói xác thực

  • email - Gói email

  • oil - Lệnh nhiên liệu, gói dầu

  • orm - Gói ORM

  • parser - Gói phân tích cú pháp Markdown

Để cài đặt một gói mới, sau đây là hai tùy chọn,

Option 1 - Cài đặt thủ công - tải xuống và cài đặt

Để cài đặt gói theo cách thủ công, trước tiên hãy tải xuống gói từ trang web của tác giả. Giải nén nó và đặt nó dướifuel/packages/ thư mục.

Option 2 - Phương pháp tự động sử dụng lệnh dầu

FuelPHP cung cấp một cách tự động để cài đặt các gói được lưu trữ trong github. Sử dụng lệnh sau để cài đặt gói, mytestpackage.

php oil package install mytestpackage

Nó sao chép mã nguồn của gói bằng cách sử dụng ứng dụng khách git và di chuyển nó vào thư mục Nhiên liệu / gói. Nếu không có git client, thì chúng ta có thể sử dụng đối số lệnh –direct để chỉ đạo lệnh tải xuống và cài đặt các gói như sau.

php oil package install mytestpackage --direct

Sử dụng các gói

Các gói có thể được sử dụng trong ứng dụng sau khi nó được tải vào ứng dụng. Có hai cách để tải các gói vào ứng dụng.

Option 1 - Thông qua lớp Gói

FuelPHP cung cấp một lớp học, Package để tải, dỡ hàng và kiểm tra tính khả dụng của các gói thông qua các phương pháp tải, dỡ và tải, tương ứng. loadphương thức có hai tham số. Tham số đầu tiên,$package là tên của gói và tham số thứ hai, pathlà đường dẫn của gói. Tham số thứ hai là tùy chọn, nếu gói được cài đặt trongfuel/packages thư mục.

// load the orm package 
Package::load('orm');  

// load the parser package from a specific directory 
Package::load('parser', '/path/to/packages/dir/');  

// load the non-existent package 
Package::load('awesome'); // Throws a PackageNotFoundException

Option 2 - Thông qua tệp cấu hình

Để tải một gói vĩnh viễn, chỉ cần thêm gói dưới always_load mục cấu hình trong tệp cấu hình chính, fuel/app/config/config.php. Để nạp gói email, sử dụng cú pháp sau.

'always_load' => array ( 
   'packages' => array ( 
      'email', 
   ), 
),

Sau khi các gói được tải vào ứng dụng, chúng ta có thể sử dụng nó như sau.

$instance = new Myclass; $instance = new Mynamespace\Myclass;

Cookiecung cấp khả năng lưu trữ dữ liệu phía máy khách và nó chỉ hỗ trợ một lượng nhỏ dữ liệu. Thông thường, nó là 2KB cho mỗi miền và nó phụ thuộc vào trình duyệt.Sessioncung cấp lưu trữ dữ liệu phía máy chủ và nó hỗ trợ một lượng lớn dữ liệu. Hãy để chúng tôi xem qua cách tạo cookie và phiên trong ứng dụng web FuelPHP.

Bánh quy

FuelPHP cung cấp một Cookielớp để tạo một mục cookie. Lớp cookie được sử dụng để tạo, gán và xóa cookie.

Định cấu hình Cookie

Lớp Cookie có thể được định cấu hình trên toàn cầu thông qua tệp cấu hình ứng dụng chính, nằm tại fuel / app / config / config.php. Nó được định nghĩa như sau.

'cookie' => array (  
   
   //Number of seconds before the cookie expires 
   'expiration'  => 0,  
   
   //Restrict the path that the cookie is available to 
   'path'        => '/',  
   
   //Restrict the domain that the cookie is available to 
   'domain'      => null,  
   
   // Only transmit cookies over secure connections 
   'secure'      => false,  
   
   // Only transmit cookies over HTTP, disabling Javascript access 
   'http_only'   => false, 
),

Phương pháp

Lớp cookie cung cấp các phương thức để tạo, truy cập và xóa một mục cookie. Chúng như sau:

bộ()

phương thức set được sử dụng để tạo một biến Cookie. Nó chứa các đối số sau,

  • $name - Khóa trong mảng $ _COOKIE.

  • $value - Giá trị của cookie.

  • $expiration - Số giây mà cookie sẽ tồn tại.

  • $path - Đường dẫn trên máy chủ mà cookie sẽ có sẵn.

  • $domain - Tên miền mà cookie có sẵn.

  • $secure - Đặt thành true nếu bạn chỉ muốn truyền cookie qua các kết nối an toàn.

  • $httponly - Chỉ cho phép truyền cookie qua HTTP, vô hiệu hóa quyền truy cập JavaScript.

Cookie::set('theme', 'green');

được()

Phương thức get được sử dụng để đọc một biến Cookie. Nó chứa các đối số sau,

  • $name - Khóa trong mảng $ _COOKIE.

  • $value - Giá trị trả về nếu không có khóa i là mảng $ _COOKIE.

Cookie::get('theme');

xóa bỏ()

Phương thức xóa được sử dụng để xóa một biến Cookie. Nó chứa các đối số sau,

  • $name - Khóa trong mảng $ _COOKIE.

  • $value - Giá trị của cookie.

  • $domain - Tên miền mà cookie có sẵn.

  • $secure - Đặt thành true nếu bạn chỉ muốn truyền cookie qua các kết nối an toàn.

  • $httponly - Chỉ cho phép truyền cookie qua HTTP, vô hiệu hóa quyền truy cập JavaScript.

Cookie::delete('theme');

Phiên họp

FuelPHP cung cấp lớp học, Session để duy trì trạng thái của ứng dụng.

Định cấu hình phiên

Lớp phiên có thể được định cấu hình thông qua tệp cấu hình đặc biệt, fuel/core/config/session.php. Một số mục cấu hình quan trọng như sau:

  • auto_initialize - Khởi tạo phiên tự động.

  • driver- Tên của trình điều khiển phiên. Phiên được triển khai bằng cách sử dụng trình điều khiển và các tùy chọn có thể có là cookie, db, memcached, redis và tệp. Trình điều khiển mặc định là cookie.

  • match_ip - Kiểm tra IP của máy khách.

  • match_ua - Kiểm tra tác nhân người dùng máy khách.

  • expiration_time - Giá trị thời gian chờ của phiên tính bằng giây.

  • rotation_time - Thời gian gia hạn phiên làm việc.

Phương thức phiên

Lớp phiên cung cấp các phương thức để thao tác dữ liệu phiên. Chúng như sau,

instance ()

Các instance phương thức trả về một mặc định hoặc một phiên bản cụ thể, được xác định bằng tên.

$session = Session::instance(); // default instance $session = Session::instance('myseesion'); // specific instance

bộ()

Các set được sử dụng để gán một biến Session.

Session::set('userid', $userid);

được()

Các get phương thức cho phép bạn truy xuất các biến được lưu trữ từ phiên.

$userid = Session::get('userid');

xóa bỏ()

Các delete cho phép bạn xóa một biến phiên được lưu trữ.

Session::delete('userid');

tạo nên()

Các createcho phép bạn tạo một phiên mới. Nếu một phiên đã có mặt, nó sẽ bị hủy và một phiên mới được tạo.

Session::create();

hủy hoại()

Các destroy được sử dụng để hủy một phiên hiện có.

Session::destroy();

đọc()

Các read phương pháp cho phép bạn đọc một phiên.

Session::read();

ghi ()

Các write cho phép bạn viết phiên làm việc.

Session::write();

Chìa khóa()

Các keycho phép bạn truy xuất các phần tử của khóa phiên. Giá trị của khóa là duy nhất.

$session_id = Session::key('session_id');

An eventlà một hành động hoặc sự cố được chương trình công nhận và có thể do chính chương trình xử lý. Ví dụ: chúng tôi có thể xác định một hành động hoặc sự kiện có tên my_fuel_event và sau đó thực hiện một số công việc bất cứ khi nào sự kiện, my_fuel_event được gọi. FuelPHP cung cấp lớp học,Event để làm việc với các sự kiện trong ứng dụng.

Sự kiện hệ thống

FuelPHP đã định nghĩa một số sự kiện mà qua đó chúng ta có thể thực hiện một số công việc bất cứ khi nào các sự kiện đã xác định được gọi hoặc kích hoạt bởi ứng dụng. Trợ giúp này thay đổi hoạt động của FuelPHP mà không thay đổi các tệp mã lõi của FuelPHP. Các sự kiện được xác định trước như sau:

  • app_created - Sự kiện này sẽ được kích hoạt sau khi khuôn khổ FuelPHP đã được khởi chạy.

  • request_created - Sự kiện này sẽ được kích hoạt sau khi một đối tượng Yêu cầu mới đã được giả mạo.

  • request_started - Sự kiện này sẽ được kích hoạt khi thực hiện một yêu cầu được yêu cầu.

  • controller_started - Sự kiện này sẽ được kích hoạt trước khi phương thức before () của bộ điều khiển được gọi.

  • controller_finished - Sự kiện này sẽ được kích hoạt sau khi phương thức after () bộ điều khiển được gọi và nhận được phản hồi.

  • response_created - Sự kiện này sẽ được kích hoạt sau khi một đối tượng Phản hồi mới đã được giả mạo.

  • request_finished - Sự kiện này sẽ được kích hoạt khi việc thực thi Yêu cầu hoàn tất và nhận được phản hồi.

  • shutdown - Sự kiện này sẽ được kích hoạt sau khi yêu cầu chính được xử lý và kết quả được gửi đi.

Chúng tôi có thể xử lý các sự kiện trong tệp cấu hình đặc biệt, fuel/app/config/events.php như sau -

<?php  
   return array ( 
      'fuelphp' => array ( 
         'app_created' => function() { 
            // After FuelPHP initialised
         }, 
         'request_created' => function() { 
            // After Request forged 
         }, 
         'request_started' => function() { 
            // Request is requested 
         }, 
         'controller_started' => function() { 
            // Before controllers before() method called 
         }, 
         'controller_finished' => function() { 
            // After controllers after() method called 
         }, 
         'response_created' => function() { 
            // After Response forged 
         }, 
         'request_finished' => function() { 
            // Request is complete and Response received 
         }, 
         'shutdown' => function() { 
            // Output has been send out 
         }, 
      ), 
   );

Phương thức sự kiện

Lớp sự kiện cung cấp các phương thức để đăng ký, hủy đăng ký và kích hoạt các sự kiện. Chúng như sau,

Đăng ký()

Phương thức đăng ký cho phép tệp đăng ký một đối tượng sẽ được chạy khi phương thức kích hoạt được gọi.

$my_event_code = function() { 
   echo 'my event'; 
} 
Event::register('my_event', $my_event_code);

hủy đăng ký ()

Phương thức hủy đăng ký cho phép tệp hủy đăng ký một đối tượng sẽ được chạy khi phương thức kích hoạt được gọi.

Event::unregister('my_event', $my_event_code);

Kích hoạt()

Phương thức kích hoạt được sử dụng để kích hoạt hoặc kích hoạt các lệnh gọi lại được liên kết thông qua phương thức đăng ký.

Event::trigger('my_event');

has_events ()

Phương thức has_events có sẵn để bạn có thể kiểm tra xem một sự kiện đã đăng ký cụ thể có trình kích hoạt hay không.

Event::has_events('my_event');

làm giả()

Forge trả về một đối tượng sự kiện mới.

$event = Event::forge();

instance ()

Cá thể trả về một singleton đối tượng sự kiện mới.

$event = Event::instance('event_instance');

Chức năng email là tính năng được yêu cầu nhiều nhất trong khuôn khổ web. FuelPHP cung cấp một lớp email thanh lịch được đóng gói dưới dạng một gói. Nó được sử dụng để gửi email văn bản thuần túy đơn giản cũng như email văn bản đa dạng thức nâng cao với nhiều tệp đính kèm. Nó hỗ trợ các tính năng sau - Thư văn bản thuần túy, thư HTML, tệp đính kèm và tệp đính kèm nội tuyến.

Cấu hình

Để kích hoạt chức năng email trong ứng dụng, chúng ta chỉ cần tải gói email như được chỉ định bên dưới trong tệp cấu hình chính, fuel / app / config / config.php.

'always_load' => array ( 
   'packages' => array ( 
      'email', 
   ), 
),

Một tùy chọn khác là tải gói email, chính bộ điều khiển như sau.

\Package::load('email');

Cài đặt email có thể được thực hiện trong tệp cấu hình chính và một số tùy chọn quan trọng như sau,

  • driver - Trình điều khiển email như smtp

  • is_html - Có gửi thư dưới dạng nội dung HTML hay không

  • priority - Ưu tiên của email

  • smtp.host - Máy chủ lưu trữ SMTP

  • smtp.port - Cổng máy chủ SMTP

  • smtp.username - Tên người dùng máy chủ SMTP

  • smtp.password - Mật khẩu máy chủ SMTP

  • smtp.timeout - Thời gian chờ SMTP

  • smtp.starttls - Máy chủ SMTP có cần lệnh STARTTLS hay không

API email

Sau đây là API được cung cấp bởi email và lớp trình điều khiển email.

làm giả

Mục đích: Để tạo một phiên bản của trình điều khiển email. Nó tạo trình điều khiển dựa trên cấu hình hoặc đầu vào mà nó nhận được. Trình điều khiển email cung cấp các tính năng để tạo và gửi thư. Một số trình điều khiển email có thể có làsmtp, sendmail, mailgun,mandrill.

  • Parameter - Không có hoặc một loạt chi tiết cấu hình

  • Returns - Trả về đối tượng Email_Driver

Ví dụ,

$email = \Email::forge(); $email = \Email::forge (array( 
   'driver' => 'smtp', 
));

thân hình

  • Purpose - Để đặt nội dung thư

  • Parameter - $ body - nội dung thư

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); 
$email->body('Body message'); //or pass it a View $email->body(\View::forge('my/view', $data);

alt_body

  • Purpose - Để đặt nội dung thư thay thế

  • Parameter - $ alt_body - nội dung thư thay thế

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); $email->alt_body('Body message');  

//or pass it a View 
$email->alt_body(\View::forge('my/view', $data);

sự ưu tiên

  • Purpose - Để đặt mức độ ưu tiên của thư

  • Parameter -

    • $priority- giá trị của mức độ ưu tiên. Các tùy chọn là -

a. \Email::P_LOWEST 
* \Email::P_LOW 
* \Email::P_NORMAL 
* \Email::P_HIGH 
* \Email::P_HIGHEST
  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); 
$email->priority(\Email::P_HIGHEST);

html_body

  • Purpose - Để đặt nội dung thư ở định dạng HTML

  • Parameter -

    • $html - nội dung thư trong HTML;

    • generate_alt - có tạo thông báo thay thế hay không;

    • auto_attach - có nhúng hình ảnh hay không

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); // Do generate the alt body, but don't auto attach images. $email->html_body(\View::forge('welcome/email', $data), true, false);

từ

  • Purpose - Để đặt địa chỉ từ

  • Parameters -

    • $from - từ địa chỉ email;

    • $name - Tên người gửi

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); 
$email->from('[email protected]', 'My Name');

môn học

  • Purpose - Để đặt chủ đề của tin nhắn

  • Parameter - $ chủ đề - chủ đề của email

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); $email->subject('Suject of the mail message');

đến

  • Purpose - Để đặt địa chỉ email người nhận

  • Parameters -

    • $email - địa chỉ email hoặc mảng địa chỉ email;

    • $name - tên người nhận

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); $email->to('[email protected]', 'My Dear Name'); 
$email->to (array( 
   '[email protected]', 
   '[email protected]' => 'My Dear friend', 
));

tiêu đề

  • Purpose - Để đặt tiêu đề tùy chỉnh cho thư email

  • Parameters -

    • $header - kiểu tiêu đề hoặc mảng tiêu đề;

    • $value - giá trị của tiêu đề

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge(); 
$email->header('X-SMTPAP', 'XXXXXXXX'); $email>reply_to (array( 
   'X-SMTPAP'  => 'XXXXXX', 
   'X-SMTPAP2' > 'XXXXXA',
));

đính kèm

  • Purpose - Để đính kèm một tệp vào thư email

  • Parameters-

    • $file - đường dẫn tệp;

    • $inline - có đính kèm tệp nội dòng hay không;

    • $cid - định danh nội dung;

    • $mime - Kiểu MIME của tệp đính kèm;

    • $name - ghi đè tên tệp đính kèm

  • Returns - Trả về phiên bản hiện tại

Ví dụ,

$email = \Email::forge();
$email>attach(DOCROOT.'attachments/sample_attachment.pdf');

gửi

  • Purpose - Để gửi thư.

  • Parameter -

    • $validate - có xác thực địa chỉ email không

  • Returns - đúng hay sai

Ví dụ,

$email = \Email::forge(); try{ $email->send(); 

} catch(\EmailSendingFailedException $e) { // The driver could not send the mail. } catch(\EmailValidationFailedException $e) { 
   // One or more email addresses failed validation. 
}

Mẫu email làm việc

Hãy để chúng tôi sử dụng API đã học trong chương trước và tạo một mã đơn giản để gửi tin nhắn. Sau đây là mã đơn giản nhất để gửi tin nhắn.

$email = Email::forge(); $email->from('[email protected]', 'person1'); 
$email->to('[email protected]', 'person2'); $email->subject('Add something'); 
$email->body('contents of mail'); $email->send();

Profilerlà một trong những công cụ quan trọng để phân tích và cải thiện hiệu suất của ứng dụng. FuelPHP cung cấp một bộ hồ sơ tuyệt vời để lập hồ sơ ứng dụng. Hãy để chúng tôi tìm hiểu về cấu hình trong FuelPHP trong chương này.

Bật hồ sơ

Hồ sơ bị tắt theo mặc định. Để bật cấu hình, hãy đặt cấu hình thuộc tính thành true trong tệp cấu hình chính, fuel / app / config / config.php như sau.

'profiling'  => true,

Bây giờ, hồ sơ được bật trong ứng dụng. Sau khi kích hoạt cấu hình, tất cả các trang được yêu cầu sẽ hiển thị thêm một tab ở cuối trang với thông tin cấu hình như trong ảnh chụp màn hình sau.

Thông tin hồ sơ

Hồ sơ có giao diện theo thẻ và nó bao gồm các dữ liệu sau,

  • Console - Cung cấp thông tin về lỗi, mục nhập nhật ký, sử dụng bộ nhớ hoặc thời gian thực thi.

  • Load time - Hiển thị thời gian tải yêu cầu.

  • Database - Số lượng truy vấn được thực hiện và thời gian thực hiện.

  • Memory - Tổng bộ nhớ được sử dụng cho yêu cầu.

  • Files - Hiển thị tất cả các tệp PHP.

  • Config - Nội dung cấu hình ở cuối yêu cầu.

  • Session - Nội dung phiên khi kết thúc yêu cầu.

  • GET - Nội dung của mảng $ _GET.

  • POST - Nội dung của mảng $ _POST.

Lớp hồ sơ

Lớp hồ sơ được sử dụng để thêm thông tin hồ sơ của bạn. Nó triển khai một phiên bản tùy chỉnh của PHPQuickProfiler (PQP). Profiler chứa một tập hợp các biến javaScript để kiểm soát trạng thái ban đầu của Profiler.

Profiler lớp học hỗ trợ những điều sau methods -

dấu()

phương pháp đánh dấu sẽ thêm một điểm đánh dấu tốc độ vào trình biên dịch. Nó hiển thị thời gian tải.

Profiler::mark('my custom code');

mark_memory ()

Phương thức * mark_memory * thêm một điểm đánh dấu bộ nhớ vào trình biên dịch. Nếu không có đầu vào nào được chỉ định, việc sử dụng bộ nhớ tại thời điểm đó sẽ được ghi lại. Nếu chúng ta chỉ định biến và nhãn cho biến như hình dưới đây, thì nó sẽ hiển thị mức sử dụng bộ nhớ của biến và gắn nhãn nó bằng nhãn đã chỉ định.

mark_memory($this, 'My Employee Controller memory usage');

bảng điều khiển ()

Phương thức console sẽ chỉ cần thêm một mục nhật ký vào trình biên dịch.

Profiler::console('log entry');

FuelPHP cung cấp hỗ trợ tuyệt vời để xử lý các lỗi và gỡ lỗi ứng dụng. Hãy để chúng tôi hiểu cách xử lý lỗi và gỡ lỗi trong chương này.

Xử lý lỗi

Xử lý lỗi FuelPHP dựa trên các trường hợp ngoại lệ. FuelPHP cung cấp ngoại lệ PhpErrorException cho tất cả các lỗi php cũ. FuelPHP tăng PhpErrorException bất cứ khi nào gặp lỗi trong mã PHP. FuelPHP cũng giúp dễ dàng hiển thị các trang lỗi tùy chỉnh cho các mã trạng thái HTTP khác nhau.

Lỗi không tìm thấy tệp

FuelPHP cung cấp một lớp ngoại lệ mới, HttpNotFoundException để xử lý các yêu cầu không xác định. Đôi khi, chúng tôi có thể gặp phải yêu cầu có thể không được xử lý. Tại thời điểm đó, chúng ta chỉ có thể ném HttpNotFoundException.

Theo mặc định, một trang mặc định được định cấu hình cho HttpNotFoundException trong tệp cấu hình tuyến đường, fuel / app / config / lines.php sử dụng mục nhập 400. Bất cứ khi nào HttpNotFoundException được nâng lên, yêu cầu sẽ được chuyển hướng đến trang 400.

'_404_'   => 'welcome/404',    // The main 404 route

Lỗi nội bộ

FuelPHP cung cấp một lớp ngoại lệ mới, HttpServerErrorException để xử lý tất cả các lỗi máy chủ. Đôi khi, chúng tôi không thể xử lý yêu cầu đã cho do lỗi nội bộ. Tại thời điểm đó, chúng ta có thể ném HttpServerErrorException.

Theo mặc định, một trang mặc định được định cấu hình cho HttpServerErrorException trong tệp cấu hình tuyến đường, fuel / app / config / lines.php bằng cách sử dụng mục nhập 500. Bất cứ khi nào HttpServerErrorException được nâng lên, yêu cầu sẽ được chuyển hướng đến trang 500.

'_500_'   => 'welcome/500',    // The main 500 route

Trang này sẽ ghi lại lỗi, hiển thị lỗi định dạng di chúc trong trang và thỉnh thoảng gửi thông báo đến quản trị viên hệ thống.

Lỗi vi phạm quyền truy cập

FuelPHP cung cấp một lớp ngoại lệ mới, HttpNoAccessException để xử lý các vi phạm truy cập. Đôi khi, chúng tôi không thể xử lý yêu cầu do hạn chế quyền truy cập. Tại thời điểm đó, chúng ta có thể ném HttpNoAccessException.

Theo mặc định, một trang mặc định được định cấu hình cho HttpNoAccessException trong tệp cấu hình tuyến đường, fuel / app / config / route.php bằng cách sử dụng mục 403. Bất cứ khi nào HttpNoAccessException được nâng lên, yêu cầu sẽ được chuyển hướng đến trang 403.

'_403_'   => 'welcome/403',     // The main 403 route

Trang này sẽ hiển thị thông tin vi phạm quyền truy cập.

Gỡ lỗi

Gỡ lỗi là một trong những hoạt động thường xuyên nhất để phát triển một ứng dụng. FuelPHP cung cấp một lớp đơn giản,Debugđể xử lý hoạt động gỡ lỗi của ứng dụng. Chúng ta hãy tìm hiểu lớp Debug và các phương thức của nó trong chương này.

Lớp gỡ lỗi

Lớp gỡ lỗi cung cấp các phương thức tiện ích để hiển thị thông tin chi tiết của các biến, đối tượng, mảng, v.v. Lớp gỡ lỗi cung cấp các phương thức sau:

đổ

Phương thức kết xuất trả về nhiều giá trị hỗn hợp cho trình duyệt theo cách có cấu trúc được định dạng.

Debug::dump($var1, $var2);

backtrace ()

backtrace hiển thị thông tin chi tiết về việc thực thi mã hiện tại. Nó hiển thị thông tin tệp PHP, dòng hiện tại và tất cả các hành động trước đó của nó.

Debug::backtrace();

các lớp học()

Trả về danh sách tất cả các lớp.

Debug::classes();

giao diện ()

Trả về danh sách tất cả các lớp giao diện.

Debug::interfaces();

bao gồm()

Trả về danh sách tất cả các tệp được bao gồm hiện được tải trong thời gian chạy.

Debug::includes();

chức năng()

Trả về danh sách tất cả các hàm.

Debug::functions();

hằng số ()

Trả về danh sách tất cả các hằng số.

Debug::constants();

phần mở rộng ()

Trả về danh sách tất cả các tiện ích mở rộng.

Debug::extensions();

tiêu đề ()

Trả về danh sách tất cả các tiêu đề HTTP.

Debug::headers();

phpini ()

In danh sách cài đặt cấu hình đọc từ tệp php.ini.

Debug::phpini();

Kiểm thử đơn vị là một quá trình thiết yếu trong việc phát triển các dự án lớn. Unit testsgiúp tự động hóa việc kiểm tra các thành phần của ứng dụng ở mọi giai đoạn phát triển. Nó cảnh báo khi thành phần của ứng dụng không hoạt động theo đặc điểm kinh doanh của dự án. Kiểm thử đơn vị có thể được thực hiện thủ công nhưng thường được tự động hóa.

PHPUnit

Khung FuelPHP tích hợp với khung thử nghiệm PHPUnit. Để viết một bài kiểm tra đơn vị cho khung FuelPHP, chúng ta cần thiết lập PHPUnit. Nếu PHPUnit chưa được cài đặt, hãy tải xuống và cài đặt nó. Chúng tôi có thể xác nhận tính khả dụng của PHPUnit trong hệ thống của mình bằng lệnh sau.

phpunit --version

Nếu có PHPUnit, bạn sẽ thấy kết quả tương tự như sau.

PHPUnit 5.1.3 by Sebastian Bergmann and contributors.

Tạo bài kiểm tra đơn vị

Vị trí tiêu chuẩn được FuelPHP cung cấp để viết bài kiểm tra đơn vị là nhiên liệu / ứng dụng / kiểm tra. Chúng ta có thể viết bài kiểm tra đơn vị cho bộ điều khiển, mô hình, chế độ xem và người trình bày trong các thư mục riêng biệt. Hãy để chúng tôi viết một bài kiểm tra đơn vị để xác thực đối tượng Model_Eaffee.

  • Step 1 - Tạo thư mục, mô hình trong thư mục fuel / app / tests.

  • Step 2 - Tạo một tệp tin, worker.php trong thư mục fuel / app / tests / model /.

  • Step 3 - Tạo một lớp thử nghiệm mới, Test_Model_Eosystemee bằng cách mở rộng lớp TestCase được cung cấp bởi PHPUnit.

  • Step 4 - Viết một phương thức, testInstanceOfErantyee () để tạo tài sản cho việc tạo đối tượng nhân viên bằng cách sử dụng phương thức confirmInstanceOf () do lớp TestCase của PHPUnit cung cấp.

Sau đây là mã hoàn chỉnh -

<?php  
   class Test_Model_Employee extends TestCase { 
      public function testInstanceOfEmployee() { 
         $this->assertInstanceOf(Model_Employee::class, new Model_Employee()); 
      } 
   }

Tạo nhóm thử nghiệm

FuelPHP cung cấp một tùy chọn để tạo một nhóm các trường hợp thử nghiệm. Tạo nhóm đơn giản như thêm thuộc tính docblock, @group. Hãy để chúng tôi đưa trường hợp thử nghiệm của chúng tôi vào nhóm MyTest.

<?php   
   /** 
      * @group MyTest 
   */ 
   class Test_Model_Employee extends TestCase { 
      public function testInstanceOfEmployee() { 
         $this->assertInstanceOf(Model_Employee::class, new Model_Employee()); 
      } 
   }

Chạy thử nghiệm

Để chạy tất cả thử nghiệm trong thư mục, hãy sử dụng lệnh sau.

$ php oil test

Để chạy một nhóm kiểm tra cụ thể, hãy sử dụng lệnh sau.

$ php oil test --group = MyTest

Sau khi thực hiện lệnh, bạn sẽ nhận được phản hồi sau.

Tests Running...This may take a few moments.
PHPUnit 5.1.3 by Sebastian Bergmann and contributors.
                                        1 / 1 (100%).
Time: 123 ms, Memory: 8.00Mb
OK (1 test, 1 assertion)

Trong chương này, chúng ta sẽ học cách tạo một ứng dụng BookStore dựa trên MVC hoàn chỉnh trong FuelPHP.

bước 1: Tạo một dự án

Tạo một dự án mới có tên “BookStore” trong FuelPHP bằng cách sử dụng lệnh sau.

oil create bookstore

bước 2: Tạo bố cục

Tạo một bố cục mới cho ứng dụng của chúng tôi. Tạo một tệp, layout.php tại vị trí fuel / app / views / layout.php. Mã như sau,

Nhiên liệu / ứng dụng / lượt xem / layout.php

<!DOCTYPE html> 
<html lang = "en"> 
   <head> 
      <meta charset = "utf-8"> 
      <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> 
      <meta name = "viewport" content = "width = device-width, initial-scale = 1">  
      <title><?php echo $title; ?></title>  
      
      <!-- Bootstrap core CSS --> 
      <link href = "/assets/css/bootstrap.min.css" rel = "stylesheet">  
      <script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
      </script> 
      <script src = "/assets/js/bootstrap.min.js"></script> 
   </head>  
   
   <body> 
      <nav class = "navbar navbar-inverse navbar-fixed-top"> 
         <div class = "container"> 
            <div class = "navbar-header">
               
               <button type = "button" class = "navbar-toggle collapsed" 
                  datatoggle = "collapse" data-target = "#navbar" 
                  aria-expanded = "false" ariacontrols = "navbar"> 
                  <span class=  "sr-only">Toggle navigation</span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
                  <span class = "icon-bar"></span> 
               </button> 
               <a class = "navbar-brand" href = "#">FuelPHP Sample</a> 
            </div> 
            
            <div id = "navbar" class = "collapse navbar-collapse"> 
               <ul class = "nav navbar-nav"> 
                  <li class = "active"><a href = "/book/index">Home</a></li> 
                  <li><a href = "/book/add">Add book</a></li> 
               </ul> 
            </div><!--/.nav-collapse --> 
         </div> 
      </nav>  
      
      <div class = "container"> 
         <div class = "starter-template" style = "padding: 50px 0 0 0;"> 
            <?php echo $content; ?> 
         </div> 
      
      </div><!-- /.container --> 
   </body>
   
</html>

Ở đây, chúng tôi đang sử dụng mẫu bootstrap. FuelPHP có hỗ trợ hạng nhất cho các mẫu bootstrap. Chúng tôi đã tạo hai biến, tiêu đề và nội dung. tiêu đề được sử dụng để chỉ định tiêu đề của trang hiện tại và nội dung được sử dụng để chỉ định chi tiết trang hiện tại.

bước 3: Tạo bộ điều khiển

Tạo bộ điều khiển mới, Controller_Book để hiển thị, thêm, chỉnh sửa và xóa sách. Tạo một tệp mới, fuel / app / class / controller / book.php và đặt mã sau.

Nhiên liệu / ứng dụng / lớp học / bộ điều khiển / book.php

<?php  
   class Controller_Book extends Controller_Template {
      public $template = 'layout'; 
      public function action_index() { 
         
         // Create the view object 
         $view = View::forge('book/index'); // set the template variables $this->template->title = "Book index page"; 
         $this->template->content = $view; 
      } 
   }

Ở đây, chúng tôi đã tạo bộ điều khiển sách bằng cách kế thừa bộ điều khiển mẫu và đặt mẫu mặc định là fuel / app / views / layout.php.

bước 4: Tạo chế độ xem chỉ mục

Tạo thư mục, đặt trong thư mục views trong thư mục fuel / app / views. Sau đó, tạo một tệp index.php bên trong thư mục sách và thêm mã sau,

Nhiên liệu / ứng dụng / lượt xem / index.php

<h3>index page</h3>

Hiện tại, chúng tôi đã tạo bộ điều khiển sách cơ bản.

bước 5: Sửa đổi tuyến đường mặc định

Cập nhật tuyến đường mặc định để đặt trang chủ của ứng dụng thành bộ điều khiển sách. Mở tệp cấu hình định tuyến mặc định, fuel / app / config / lines.php và thay đổi nó như sau.

Nhiên liệu / ứng dụng / cấu hình / tuyến đường.php

<?php 
   return array ( 
      '_root_'  => 'book/index',  // The default route 
      '_404_'   => 'welcome/404', // The main 404 route 

      'hello(/:name)?' => array('welcome/hello', 'name' => 'hello'), 
   );

Bây giờ, khi yêu cầu URL, http: // localhost: 8080 / sẽ trả về trang chỉ mục của trình điều khiển sách như sau,

bước 6: Tạo cơ sở dữ liệu

Tạo cơ sở dữ liệu mới trong máy chủ MySQL, sử dụng lệnh sau,

create database tutorialspoint_bookdb

Sau đó, tạo một bảng bên trong cơ sở dữ liệu bằng lệnh sau,

CREATE TABLE book ( 
   id INT PRIMARY KEY AUTO_INCREMENT, 
   title VARCHAR(80) NOT NULL, 
   author VARCHAR(80) NOT NULL, 
   price DECIMAL(10, 2) NOT NULL 
);

Chèn một số bản ghi mẫu vào bảng bằng câu lệnh SQL sau.

INSERT 
INTO 
   book(title, 
   author, 
   price) 
VALUES( 
   'The C Programming Language', 
   'Dennie Ritchie', 
   25.00 
),( 
   'The C++ Programming Language', 
   'Bjarne Stroustrup', 
   80.00
),( 
   'C Primer Plus (5th Edition)', 
   'Stephen Prata', 
   45.00 
),('Modern PHP', 'Josh Lockhart', 10.00),( 
   'Learning PHP, MySQL & JavaScript, 4th Edition', 
   'Robin Nixon', 
   30.00 
)

bước 7: Định cấu hình cơ sở dữ liệu

Định cấu hình cơ sở dữ liệu bằng cách sử dụng tệp cấu hình cơ sở dữ liệu, db.php nằm tại fuel / app / config.

Nhiên liệu / app / config / db.php

<?php  
   return array ( 
      'development' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_bookdb', 
            'username'       => 'root', 
            'password'       => 'password', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ),
      'production' => array ( 
         'type'           => 'mysqli', 
         'connection'     => array ( 
            'hostname'       => 'localhost', 
            'port'           => '3306', 
            'database'       => 'tutorialspoint_bookdb', 
            'username'       => 'root', 
            'password'       => 'password', 
            'persistent'     => false, 
            'compress'       => false, 
         ), 
         'identifier'     => '`', 
         'table_prefix'   => '', 
         'charset'        => 'utf8', 
         'enable_cache'   => true, 
         'profiling'      => false, 
         'readonly'       => false, 
      ), 
   );

bước 8: Bao gồm gói Orm

Cập nhật tệp cấu hình chính để bao gồm gói ORM. Nó nằm ở “fuel / app / config /”.

Nhiên liệu / app / config / config.php

'always_load' => array ( 
   'packages' => array ( 
      'orm' 
   ), 
),

bước 9: Tạo mô hình

Tạo một mô hình sách trong book.php tại “fuel / app / class / model”. Nó được định nghĩa như sau:

Nhiên liệu / ứng dụng / lớp học / mô hình / sách.php

<?php  
   class Model_Book extends Orm\Model { 
      protected static $_connection = 'production'; protected static $_table_name = 'book'; 
      protected static $_primary_key = array('id'); protected static $_properties = array ( 
         'id',  
         'title' => array ( 
            'data_type' => 'varchar', 
            'label' => 'Book title', 
            'validation' => array ( 
               'required',  
               'min_length' => array(3),  
               'max_length' => array(80) 
            ), 
            
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'author' => array ( 
            'data_type' => 'varchar', 
            'label' => 'Book author', 
            'validation' => array ( 
               'required', 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
         'price' => array ( 
            'data_type' => 'decimal', 
            'label' => 'Book price', 
            'validation' => array ( 
               'required', 
            ), 
            'form' => array ( 
               'type' => 'text' 
            ), 
         ),  
      );  
      protected static $_observers = array('Orm\\Observer_Validation' => array ( 
         'events' => array('before_save') 
      )); 
   }

Ở đây, chúng tôi đã chỉ định các chi tiết cơ sở dữ liệu làm thuộc tính của mô hình. Nó cũng có chi tiết xác nhận.

bước 10: Hiển thị sách

Cập nhật hành động chỉ mục trong bộ điều khiển sách để liệt kê các sách có sẵn trong cơ sở dữ liệu.

Nhiên liệu / ứng dụng / lớp học / bộ điều khiển / book.php

<?php  
   class Controller_Book extends Controller_Template { 
      public $template = 'layout'; 
      public function action_index() { 
         
         // Create the view object 
         $view = View::forge('book/index'); // fetch the book from database and set it to the view $books = Model_Book::find('all'); 
         $view->set('books', $books);  
         
         // set the template variables
         $this->template->title = "Book index page"; $this->template->content = $view; 
      } 
   }

Ở đây, chúng tôi đã sử dụng orm để tìm nạp chi tiết sách từ cơ sở dữ liệu và sau đó chuyển chi tiết sách sang dạng xem.

bước 11: Cập nhật chế độ xem chỉ mục

Cập nhật tệp xem index.php tại “fuel / app / views / book”. Mã được cập nhật đầy đủ như sau,

Nhiên liệu / ứng dụng / lượt xem / sách / index.php

<table class = "table"> 
   <thead> 
      <tr> 
         <th>#</th> 
         <th>Title</th> 
         <th>Author</th> 
         <th>Price</th> 
         <th></th> 
      </tr> 
   </thead> 
   
   <tbody> 
      <?php 
         foreach($books as $book) { ?> <tr> <td><?php echo $book['id']; ?></td> 
         <td><?php echo $book['title']; ?></td> <td><?php echo $book['author']; ?></td> 
         <td><?php echo $book['price']; ?></td> <td> <a href = "/book/edit/<?php echo $book['id']; ?>">Edit</a> 
            <a href = "/book/delete/<?php echo $book['id']; ?>">Delete</a> 
         </td>
      </tr> 
      
      <?php 
      } 
      ?> 
   </tbody> 
</table> 
<ul>
</ul>

Bây giờ, khi yêu cầu URL, http: // localhost: 8080 / sẽ hiển thị trang như sau:

bước 12: Tạo hành động để thêm sách

Tạo chức năng để thêm sách mới vào hiệu sách. Tạo một hành động mới, action_add trong trình điều khiển sách như sau,

public function action_add() { 
   
   // create a new fieldset and add book model 
   $fieldset = Fieldset::forge('book')->add_model('Model_Book');  
   
   // 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('book/add')); $view = View::forge('book/add'); 
   $view->set('form', $formHtml, false);  
   
   if (Input::param() != array()) { 
      try { 
         $book = Model_Book::forge(); $book->title = Input::param('title'); 
         $book->author = Input::param('author'); $book->price = Input::param('price'); 
         $book->save(); Response::redirect('book'); } catch (Orm\ValidationFailed $e) { 
         $view->set('errors', $e->getMessage(), false); 
      } 
   }  
   $this->template->title = "Book add page"; $this->template->content = $view; }

Tại đây, hai quá trình sau đang được thực hiện,

  • Xây dựng biểu mẫu sách để thêm sách bằng phương pháp Fieldset và mô hình Sách.

  • Xử lý biểu mẫu sách, khi người dùng nhập thông tin sách và gửi lại biểu mẫu. Nó có thể được tìm thấy bằng cách kiểm tra phương thức Input :: param () cho bất kỳ dữ liệu đã gửi nào. Xử lý biểu mẫu bao gồm các bước sau:

    • Thu thập thông tin cuốn sách.

    • Xác thực thông tin sách. Chúng tôi đã thiết lập xác thực được gọi trước khi lưu phương thức. Nếu xác thực không thành công, nó sẽ ném ra ngoại lệ Orm \ ValidationFailed.

    • Lưu trữ thông tin sách vào cơ sở dữ liệu.

    • Chuyển hướng người dùng đến trang lập chỉ mục khi thành công. Nếu không, hãy hiển thị lại biểu mẫu.

Chúng tôi đang làm cả hai, hiển thị biểu mẫu cũng như xử lý biểu mẫu trong cùng một hành động. Khi người dùng gọi hành động lần đầu tiên, nó sẽ hiển thị biểu mẫu. Khi người dùng nhập thông tin sách và gửi dữ liệu, sau đó nó sẽ xử lý biểu mẫu.

bước 13: Tạo chế độ xem cho hành động thêm sách

Tạo chế độ xem cho hành động thêm sách. Tạo một tệp mới, fuel / app / views / book / add.php và nhập mã sau,

<style>  
   #form table { 
      width: 90%; 
   }  
   #form table tr { 
      width: 90% 
   }  
   #form table tr td { 
      width: 50% 
   }  
   #form 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; 
   }  
   #form input[type = submit] { 
      width: 100%;
      background-color: #3c3c3c; 
      color: white; 
      padding: 14px 20px; 
      margin: 8px 0; 
      border: none; 
      border-radius: 4px; 
      cursor: pointer; 
   }  
   #form div { 
      border-radius: 5px; 
      background-color: #f2f2f2; 
      padding: 20px; 
   }  
</style>  

<div id = "form">  
   <h2>Book form</h2> 
   
   <?php   
      if(isset($errors)) { 
         echo $errors; } echo $form;  
   ?> 
</div>

Ở đây, chúng tôi chỉ hiển thị biểu mẫu được tạo trong phương thức hành động. Ngoài ra, chúng tôi đang hiển thị các lỗi, nếu có.

bước 14: Kiểm tra hành động thêm sách

Yêu cầu url, http: // localhost: 8080 / book / add hoặc nhấp vào liên kết Thêm sách điều hướng, sẽ hiển thị biểu mẫu như sau,

Hình thức

Biểu mẫu với dữ liệu

Sau khi nhập thông tin sách và gửi trang, thông tin sách sẽ được lưu vào cơ sở dữ liệu và trang được chuyển đến trang mục lục như sau.

Danh sách sách có sách mới được thêm vào

bước 15: Tạo hành động để chỉnh sửa sách

Tạo chức năng chỉnh sửa và cập nhật thông tin sách hiện có. Tạo một hành động mới, action_edit trong trình điều khiển sách như sau.

public function action_edit($id = false) { if(!($book = Model_Book::find($id))) { throw new HttpNotFoundException(); } // create a new fieldset and add book model $fieldset = Fieldset::forge('book')->add_model('Model_Book'); 
   $fieldset->populate($book);  
   
   // 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('book/edit/' . $id));  
   $view = View::forge('book/add'); $view->set('form', $formHtml, false); if (Input::param() != array()) { try { $book->title = Input::param('title'); 
         $book->author = Input::param('author'); $book->price = Input::param('price'); 
         $book->save(); Response::redirect('book'); } catch (Orm\ValidationFailed $e) { 
         $view->set('errors', $e->getMessage(), false); 
      } 
   }  
   $this->template->title = "Book edit page"; $this->template->content = $view; 
}

Nó tương tự như thêm hành động, ngoại trừ nó tìm kiếm cuốn sách được yêu cầu theo id trước khi xử lý trang. Nếu tìm thấy bất kỳ thông tin sách nào trong cơ sở dữ liệu, nó sẽ tiến hành và hiển thị thông tin sách đó trong biểu mẫu. Nếu không, nó sẽ ném tập tin không tìm thấy ngoại lệ và thoát.

bước 16: Tạo chế độ xem cho hành động chỉnh sửa

Tạo chế độ xem cho hành động chỉnh sửa sách. Ở đây, chúng tôi đang sử dụng cùng một chế độ xem được sử dụng để thêm hành động.

bước 17: Kiểm tra thao tác chỉnh sửa sách.

Nhấp vào liên kết chỉnh sửa của bất kỳ cuốn sách nào trong trang liệt kê sách, nó sẽ hiện ra mẫu sách tương ứng như sau:

Biểu mẫu với chi tiết sách

bước 18: Tạo hành động để xóa sách

Tạo chức năng xóa sách khỏi hiệu sách. Tạo một hành động mới, action_delete trong trình điều khiển sách như sau,

public function action_delete($id = null) { 
   if ( ! ($book = Model_Book::find($id))) { 
      throw new HttpNotFoundException(); 

   } else { 
      $book->delete(); 
   } 
   Response::redirect('book'); 
}

Ở đây, chúng tôi đang kiểm tra sự tồn tại của sách trong cơ sở dữ liệu bằng cách sử dụng id sách được cung cấp. Nếu sách được tìm thấy, thì sách sẽ bị xóa và được chuyển hướng đến trang chỉ mục. Nếu không, một trang không tìm thấy thông tin sẽ được hiển thị.

bước 19: Kiểm tra hành động xóa

Kiểm tra hành động xóa bằng cách nhấp vào liên kết xóa trong trang danh sách sách. Nó sẽ xóa sách được yêu cầu và sau đó lại được chuyển hướng đến trang chỉ mục.

Cuối cùng, tất cả các chức năng thêm, chỉnh sửa, xóa và liệt kê thông tin sách được tạo.

FuelPHP đơn giản, linh hoạt, có thể mở rộng và dễ cấu hình so với các khung PHP dựa trên MVC khác. Nó cung cấp tất cả các tính năng của khuôn khổ MVC hiện đại. Nó có thể được sử dụng nguyên trạng hoặc có thể thay đổi hoàn toàn để phù hợp với nhu cầu của chúng ta. Trên tất cả, nó là một lựa chọn tuyệt vời để phát triển web.