溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

?前端控制器Front Controller是什么

發(fā)布時(shí)間:2020-12-16 14:26:03 來(lái)源:億速云 閱讀:313 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家介紹前端控制器Front Controller是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

前端控制器(Front Controller):

  用于集中控制用戶的所有請(qǐng)求的組件,將用戶的請(qǐng)求發(fā)送到具體的應(yīng)用程序控制器。在CI框架中,指的就是框架的入口文件Index.php.前端控制器本身是一種設(shè)計(jì)模式,詳細(xì)可參考《J2EE設(shè)計(jì)模式》。

應(yīng)用程序控制器

  應(yīng)用程序控制器是具體的處理用戶請(qǐng)求URL的控制器,通常將一組相關(guān)的處理或者請(qǐng)求放置在一個(gè)應(yīng)用程序控制器中,例如:UserController可能包含用戶的注冊(cè)、驗(yàn)證、個(gè)人信息、個(gè)人頁(yè)面等相關(guān)操作。

MVC

  老生常談的一個(gè)術(shù)語(yǔ),是一種代碼分層和組織模式。將代碼分為M(Model,業(yè)務(wù)邏輯),V(view ,視圖),C(Controller,控制器)等層次,便于將業(yè)務(wù)邏輯部分和視圖渲染部分分離,減少代碼的耦合。目前PHP中許多框架都基于MVC模式,如ZF,YII,CI等

Route路由

  雖然名為Route,但這里并不是路由器,而是指截取用戶的請(qǐng)求并將請(qǐng)求轉(zhuǎn)發(fā)到特定的Controller處理的過(guò)程。不同的框架的路由不同,但基本原理相同。

Hook鉤子

  最初的Hook是指“消息傳遞中一個(gè)環(huán)節(jié),用于監(jiān)控消息的傳遞,并在消息處理之前,添加特定的處理”。這里的Hook是指,在不改變框架核心源碼的基礎(chǔ)上增加或更改系統(tǒng)的核心功能,最典型的情況包括:在控制器加載之前或加載完成之后運(yùn)行特定的腳本。

CI框架配置

  本文的基本環(huán)境:Linux x86_64 GNU/Linux .安裝了PHP(CGI)+Nginx+Mysql+redis(所以本文的許多服務(wù)器相關(guān)的配置都是以Nginx為主,而暫時(shí)忽略Apache服務(wù)器)。

  首先下載CI框架的源碼,下載地址為:http://codeigniter.org.cn/downloads 目前穩(wěn)定版本是2.2.0 。將源碼解壓到文件夾(假設(shè)為/usr/nginx/html/CI 目錄)。

  配置CI框架之前,先瀏覽一下框架的目錄結(jié)構(gòu):

?前端控制器Front Controller是什么

其中:

Application :   應(yīng)用程序的目錄,你的所有的應(yīng)用代碼都應(yīng)該位于這個(gè)目錄

index.php :   框架的入口文件

static :  我們自己建立的目錄,放置一些CSS,image和js等靜態(tài)文件(這完全可以放到application目錄下,看個(gè)人喜好)

system :   CI框架的系統(tǒng)文件,也是源碼閱讀的主要部分

user_guide : 用戶指導(dǎo),類(lèi)似于離線的用戶手冊(cè)。

CI框架需要配置的地方比較少:

1.  配置routes

  Routes.php中配置的是默認(rèn)的應(yīng)用程序控制器和404頁(yè)面. 打開(kāi)application/config/routes.php文件, 配置如下:

$route['default_controller'] = "index";
$route['404_override'] = '';

2.  配置數(shù)據(jù)庫(kù)database.php

  如果你的應(yīng)用程序需要提供動(dòng)態(tài)內(nèi)容,那么數(shù)據(jù)庫(kù)幾乎是必不可少的配置。打開(kāi)application/config/database.php文件,該文件內(nèi)容如下:

?前端控制器Front Controller是什么

  CI框架是支持多數(shù)據(jù)流連接的,default是當(dāng)前默認(rèn)的連接,active_record用于指定是否啟用ARM(Active Record Model)。每個(gè)配置項(xiàng)非常簡(jiǎn)明,這里不再做過(guò)多介紹。

3.  去掉index.php

  現(xiàn)在訪問(wèn)你的應(yīng)用程序,url應(yīng)該類(lèi)似于這樣:

test.xq.com/index.php/index
test.xq.com/index.php/welcome

注意每個(gè)請(qǐng)求都會(huì)帶有index.php段。去掉index.php會(huì)讓URI更加美觀。

打開(kāi)剛剛添加的test.xq.com.conf文件,在server中添加如下配置:

if ($request_filename !~* /(favicon.ico|static|uploads|js|javascript|css|images|robots\.txt|index\.php|index\.html))
{
   rewrite ^/(.*)$ /index.php?$1 last;
}

重啟服務(wù)器后,現(xiàn)在,URL的訪問(wèn)方式變成了:

test.xq.com/index
test.xq.com/welcome

是不是簡(jiǎn)潔多了 :D

4.  添加.html訪問(wèn)后綴

  可能還有人喜歡url中添加特定的后綴,例如.html后綴使你的應(yīng)用程序更類(lèi)似于一系列靜態(tài)文件。配置方法是,在application/config/config.php中,更改如下配置為:

$config['url_suffix'] = '.html';

CI框架的更多配置可以參考:

讓Nginx支持.htaccess(本文沒(méi)有提及使用.htaccess重寫(xiě)的內(nèi)容,可以參考之)http://www.php100.com/html/program/nginx/2013/0905/5537.htmlCI框架集成Smarty,習(xí)慣用smarty模板引擎的童鞋可以看看 http://www.kankanews.com/ICkengine/archives/70302.shtml 配置Vhost

  為了方便訪問(wèn)(相比ip地址訪問(wèn)的方式,域名訪問(wèn)有更好的可記憶性),我們可以配置vhost,配置方式為:進(jìn)入nginx的vhost目錄,新建配置文件(本文中為test.xq.com.conf,一般情況下,我們的每個(gè)vhost都會(huì)以域名命名)。在配置文件中輸入如下內(nèi)容:

server {
  listen    80;
  server_name test.xq.com;
  root     /usr/nginx/html/CI/;

  access_log logs/xq_access_log main;
  error_log logs/testsq.log error;
  charset GBK;
  index index.php;

  location ~ .*\.(php|php5)?$
  {
    include    fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass  127.0.0.1:9000;
  }

}

Server中暫時(shí)沒(méi)有其他rewrite配置,稍后在配置CI框架的時(shí)候,我們可以添加更多的配置類(lèi)支持CI的友好URL.

打開(kāi)本地的host文件,在host中添加條目:

10.130.130.130 test.xq.com

其中10.130.130.130應(yīng)該是你的服務(wù)器的IP地址。

現(xiàn)在,在瀏覽器中可以通過(guò)域名訪問(wèn)CI框架了。

框架流程

在結(jié)束本文之前,我們?cè)倏纯碈I框架的基本流程,這個(gè)流程將貫穿源碼閱讀的始終,所以,很有必要認(rèn)真研讀一下。引用CI框架用戶手冊(cè)的上的流程圖:

?前端控制器Front Controller是什么

基本的執(zhí)行流程如下:

Index.php是前端控制器,初始化框架所需的所有資源,加載應(yīng)用程序基本配置,接收所有用戶的請(qǐng)求,并通過(guò)Route路由用戶請(qǐng)求若緩存文件存在,它將繞過(guò)通常的執(zhí)行順序,直接發(fā)送到客戶端。Security數(shù)據(jù)過(guò)濾。這位于應(yīng)用程序控制器裝載之前。應(yīng)用程序控制器加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)、類(lèi)庫(kù)、業(yè)務(wù)邏輯類(lèi)和可能的其他資源,處理用戶的請(qǐng)求視圖發(fā)送到客戶端。如果開(kāi)啟緩存,則視圖會(huì)被緩存,用于之后的請(qǐng)求。

關(guān)于前端控制器Front Controller是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI