PHP網(wǎng)站開發(fā)實(shí)例教程(第2版)PPT完整全套教學(xué)課件_第1頁
PHP網(wǎng)站開發(fā)實(shí)例教程(第2版)PPT完整全套教學(xué)課件_第2頁
PHP網(wǎng)站開發(fā)實(shí)例教程(第2版)PPT完整全套教學(xué)課件_第3頁
PHP網(wǎng)站開發(fā)實(shí)例教程(第2版)PPT完整全套教學(xué)課件_第4頁
PHP網(wǎng)站開發(fā)實(shí)例教程(第2版)PPT完整全套教學(xué)課件_第5頁
已閱讀5頁,還剩331頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

第1章開發(fā)環(huán)境搭建安裝VisualStudioCode搭建WAMP環(huán)境安裝Composer依賴管理工具Web服務(wù)器配置學(xué)習(xí)目標(biāo)熟悉VSCode編輯器的使用12掌握Apache、PHP和MySQL的安裝方法掌握Composer依賴管理工具的使用方法3熟悉掌握掌握掌握4掌握虛擬主機(jī)和訪問權(quán)限的配置方法目錄?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)搭建WAMP環(huán)境1.21.1安裝VisualStudioCode1.3安裝Composer依賴管理工具?點(diǎn)擊查看本小節(jié)知識架構(gòu)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)Web服務(wù)器配置1.4知識架構(gòu)1.2搭建WAMP環(huán)境1安裝Apache2安裝PHP3安裝MySQL知識架構(gòu)1.4Web服務(wù)器配置1配置虛擬主機(jī)2訪問權(quán)限配置3案例【按要求配置虛擬主機(jī)】1.1安裝VisualStudioCode

安裝VisualStudioCodeVisualStudioCode(簡稱VSCode)是微軟開發(fā)的一款代碼編輯器,具有免費(fèi)、開源、輕量級、高性能、跨平臺等特點(diǎn)。1.1安裝VisualStudioCode

安裝VisualStudioCode1.2搭建WAMP環(huán)境

安裝Apache創(chuàng)建安裝目錄獲取Apache安裝軟件配置和安裝啟動Apache服務(wù)1.2搭建WAMP環(huán)境

安裝Apache創(chuàng)建目錄:在C盤根目錄下創(chuàng)建一個名為web文件夾,作為PHP開發(fā)環(huán)境的安裝位置在web中創(chuàng)建apache2.4子文件夾,將Apache安裝到此文件夾中進(jìn)行管理1.2搭建WAMP環(huán)境

安裝Apache獲取Apache編譯軟件,以2.4.38為例:1.2搭建WAMP環(huán)境

安裝Apache修改conf\httpd.conf,配置安裝路徑:配置服務(wù)器域名,刪除“#”號:DefineSRVROOT"c:/Apache24"ServerName:801.2搭建WAMP環(huán)境

安裝ApacheApache常用的配置:配置項(xiàng)說明ServerRoot"${SRVROOT}"Apache服務(wù)器的根目錄,即安裝目錄Listen80服務(wù)器監(jiān)聽的端口號,例如80、8080LoadModule需要加載的模塊ServerAdminadmin@服務(wù)器管理員的郵箱地址ServerName:80服務(wù)器的域名DocumentRoot"${SRVROOT}/htdocs"網(wǎng)站根目錄ErrorLog"logs/error.log"用于記錄錯誤日志1.2搭建WAMP環(huán)境

安裝Apachehttpd-kinstall-nApache2.4切換到Apache的bin目錄,輸入以下命令開始安裝1.2搭建WAMP環(huán)境

安裝Apache啟動Apache服務(wù)通過ApacheServiceMonitor控制Apache服務(wù)的啟動、停止和重新啟動1.2搭建WAMP環(huán)境

安裝ApacheApache啟動成功后,訪問“http://localhost”測試Apache服務(wù)1.2搭建WAMP環(huán)境

安裝PHP獲取PHP安裝軟件配置PHP測試PHP是否安裝成功1.2搭建WAMP環(huán)境

安裝PHP獲取PHP安裝軟件:1.2搭建WAMP環(huán)境

安裝PHP將php-7.2.15-Win32-VC15-x86.zip壓縮包解壓到C:\web\php7.2目錄中:1.2搭建WAMP環(huán)境

安裝PHP引入擴(kuò)展目錄:在php.ini中搜索文本extension_dir,刪除該行“;”注釋

將路徑修改為PHP擴(kuò)展文件保存的路徑配置PHP時區(qū):搜索文本“date.timezone”,設(shè)置為UTC或PRCextension_dir="c:/web/php7.2/ext"date.timezone=PRC1.2搭建WAMP環(huán)境

安裝PHP在Apache中引入PHP模塊:在Apache配置文件httpd.conf第185行將PHP中的Apache2.4模塊引入LoadModulephp7_module"C:/web/php7.2/php7apache2_4.dll"<FilesMatch"\.php$">setHandlerapplication/x-httpd-php</FilesMatch>PHPIniDir"C:/web/php7.2"LoadFile"C:/web/php7.2/libssh2.dll"1.2搭建WAMP環(huán)境

安裝PHP配置Apache索引頁:在httpd.conf中搜索DirectoryIndex,將index.php添加為默認(rèn)索引頁<IfModuledir_module>DirectoryIndexindex.htmlindex.php</IfModule>1.2搭建WAMP環(huán)境

安裝PHP測試PHP是否安裝成功:創(chuàng)建test.php并訪問查看輸出結(jié)果<?phpphpinfo();?>1.2搭建WAMP環(huán)境

安裝MySQL獲取MySQL安裝軟件安裝MySQL登錄MySQL數(shù)據(jù)庫1.2搭建WAMP環(huán)境

安裝MySQL獲取MySQL安裝軟件:1.2搭建WAMP環(huán)境

安裝MySQL將壓縮包mysql-5.7.24-win32.zip解壓保存到C:\web\mysql5.7目錄中:1.2搭建WAMP環(huán)境

安裝MySQL運(yùn)行命令行工具,切換到MySQL的安裝目錄下開始安裝MySQL:mysqld-installmysql5.71.2搭建WAMP環(huán)境

安裝MySQL創(chuàng)建配置文件C:\web\mysql5.7\my.ini,配置文件指定MySQL安裝目錄(basedir)、數(shù)據(jù)庫文件保存目錄(datadir)和端口號(port)[mysqld]basedir=C:/web/mysql5.7datadir=C:/web/mysql5.7/dataport=33061.2搭建WAMP環(huán)境

安裝MySQL初始化MySQL:mysqld--initialize-insecure1.2搭建WAMP環(huán)境

安裝MySQL啟動或停止mysql服務(wù)的命令:netstartmysql5.7netstopmysql5.71.2搭建WAMP環(huán)境登錄MySQL服務(wù)器如果需要退出MySQL,直接使用exit或quit命令退出登錄

安裝MySQLmysql-uroot1.2搭建WAMP環(huán)境為了保護(hù)數(shù)據(jù)庫的安全,給root用戶設(shè)置密碼使用設(shè)置的密碼登錄

安裝MySQLmysql>ALTER

USER

'root'@'localhost'

IDENTIFIED

BY

'123456';mysql-uroot-p1234561.2搭建WAMP環(huán)境查看數(shù)據(jù)庫:

安裝MySQL1.3安裝Composer管理工具

安裝ComposerComposer的安裝界面:1.3安裝Composer管理工具

安裝Composer根據(jù)安裝向?qū)О惭b,如果看到如下輸出結(jié)果則安裝成功______/____/_______________________________///__\/__`__\/__\/__\/___/_\/___///___//_////////_///_/(__)__//\____/\____/_//_//_/.___/\____/____/\___/_//_/Composerversion1.8.42019-02-1110:52:10……(由于輸出結(jié)果很長,此處省略)1.4Web服務(wù)器配置

配置虛擬主機(jī)在hosts文件中配置IP地址和域名的映射關(guān)系:www.php.testwww.admin.test1.4Web服務(wù)器配置

配置虛擬主機(jī)修改httpd.conf文件,啟用虛擬主機(jī)配置文件,去掉“#”號:#Includeconf/extra/httpd-vhosts.conf1.4Web服務(wù)器配置

配置虛擬主機(jī)在httpd-vhosts.conf虛擬主機(jī)配置文件,添加虛擬主機(jī)的配置<VirtualHost*:80>DocumentRoot"c:/web/apache2.4/htdocs"ServerNamelocalhost</VirtualHost><VirtualHost*:80>DocumentRoot"C:/web/apache2.4/htdocs/www.php.test"ServerNamewww.php.test</VirtualHost>1.4Web服務(wù)器配置

配置虛擬主機(jī)啟動在htdocs目錄中創(chuàng)建www.php.test目錄創(chuàng)建index.html內(nèi)容為“Welcomewww.php.test”訪問兩個虛擬主機(jī)1.4Web服務(wù)器配置

訪問權(quán)限控制<Directory/>AllowOverridenoneRequirealldenied</Directory>阻止所有訪問1.4Web服務(wù)器配置

訪問權(quán)限控制<Directory"${SRVROOT}/htdocs">OptionsIndexesFollowSymLinksAllowOverrideNoneRequireallgranted</Directory>不讀取分布式文件允許所有的訪問啟用Apache的目錄瀏覽功能1.4Web服務(wù)器配置【案例】按照要求配置虛擬主機(jī)配置一個域名為www.admin.test的虛擬主機(jī)目錄指定為C:/web/www/www.admin.test關(guān)閉目錄瀏覽功能開啟分布式配置文件只允許本地訪問1.4Web服務(wù)器配置【案例】按照要求配置虛擬主機(jī)<VirtualHost*:80>DocumentRoot"C:/web/www/www.admin.test"ServerNamewww.admin.test</VirtualHost><Directory"C:/web/www"> Options-indexes AllowOverrideAll Requirelocal</Directory>第2章PHP框架基礎(chǔ)(上)初識框架MVC設(shè)計(jì)模式框架的單一入口和路由命名空間自動加載代碼規(guī)范學(xué)習(xí)目標(biāo)熟悉框架在發(fā)開中的作用12掌握MVC設(shè)計(jì)模式的基本思想掌握PHP命名空間和自動加載的使用3熟悉掌握掌握掌握4掌握框架中路由的實(shí)現(xiàn)目錄?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)MVC設(shè)計(jì)模式2.22.1初識框架2.3框架的單一入口和路由?點(diǎn)擊查看本小節(jié)知識架構(gòu)目錄?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)自動加載2.52.4命名空間2.6代碼規(guī)范?點(diǎn)擊查看本小節(jié)知識架構(gòu)知識架構(gòu)2.1初識框架1什么是框架2常見的PHP框架知識架構(gòu)2.2MVC設(shè)計(jì)模式1什么是MVC2案例【體驗(yàn)MVC設(shè)計(jì)模式】知識架構(gòu)2.3框架的單一入口和路由1什么是單一入口2案例【單一入口的實(shí)現(xiàn)】3案例【隱藏入口文件】4框架中的路由5案例【路由代碼的實(shí)現(xiàn)】知識架構(gòu)2.4命名空間1命名空間的定義2命名空間的使用3導(dǎo)入命名空間知識架構(gòu)2.5自動加載1注冊自動加載函數(shù)2注冊多個自動加載函數(shù)3注冊自動加載方法知識架構(gòu)2.6代碼規(guī)范1PSR規(guī)范2配置VCCode編輯器2.1初識框架

什么是框架遵循通用代碼規(guī)范,采用指定設(shè)計(jì)模式編寫的代碼文件集合,這些代碼文件是程序結(jié)構(gòu)代碼,可在框架中實(shí)現(xiàn)業(yè)務(wù)功能2.1初識框架

常見的PHP框架Laravel:采用MVC架構(gòu)模式,支持Composer,提倡代碼的重用,保證代碼的簡潔性與優(yōu)雅性,適合應(yīng)用各種開發(fā)模式Y(jié)ii:實(shí)現(xiàn)了MVC設(shè)計(jì)模式并基于該模式組織代碼。代碼簡潔優(yōu)雅,將代碼的重用性發(fā)揮到了極致。適用于開發(fā)大型Web應(yīng)用2.1初識框架

常見的PHP框架Symfony:

因穩(wěn)定性、長久性、靈活性、可復(fù)用組件、速度快、性能高等特點(diǎn)備受關(guān)注,適用于建立企業(yè)級的完善應(yīng)用程序ThinkPHP:

代碼風(fēng)格符合PSR規(guī)范并支持Composer,方便項(xiàng)目移植和維護(hù),適用于Web應(yīng)用敏捷開發(fā)和企業(yè)級應(yīng)用開發(fā)2.2MVC設(shè)計(jì)模式

什么是MVCMVC是模型(Model)、視圖(View)和控制器(Controller)的英文首字母縮寫模型用于處理數(shù)據(jù)的部分視圖指顯示在瀏覽器中的網(wǎng)頁控制器用來處理用戶交互的程序2.2MVC開發(fā)模式應(yīng)用場景:用戶提交表單,控制器負(fù)責(zé)讀取用戶提交的數(shù)據(jù)進(jìn)行處理,向模型發(fā)送數(shù)據(jù),再通過視圖將處理結(jié)果顯示給用戶

什么是MVC2.2MVC開發(fā)模式

什么是MVC2.2MVC開發(fā)模式

【案例】體驗(yàn)MVC設(shè)計(jì)模式創(chuàng)建實(shí)現(xiàn)思路:創(chuàng)建www.myframe.test的虛擬機(jī)創(chuàng)建控制器,用來調(diào)用模型和視圖創(chuàng)建模型,讀取數(shù)據(jù)表中的數(shù)據(jù)創(chuàng)建視圖,將讀取的數(shù)據(jù)在視圖中展示2.3框架的單一入口和路由

什么是單一入口單一入口是指項(xiàng)目具有統(tǒng)一的入口文件,項(xiàng)目中的所有功能和操作都經(jīng)過入口文件,入口文件會完成許多統(tǒng)一處理的操作,如權(quán)限控制、用戶登錄驗(yàn)證等2.3框架的單一入口和路由

【案例】單一入口的實(shí)現(xiàn)利用Apache的PATH_INFO功能,為單一入口index.php傳遞參數(shù)根據(jù)參數(shù)查找對應(yīng)的控制器和方法:$pathinfo=isset($_SERVER['PATH_INFO'])?$_SERVER['PATH_INFO']:'';$arr=explode('/',trim($pathinfo,'/'));if(!isset($arr[1])){exit('請求信息有誤。');}list($controller,$action)=$arr;define('APP_PATH','../app/');define('VIEW_PATH','../views/');$controller=ucwords($controller).'Controller';requireAPP_PATH.$controller.'.php';$obj=new$controller();$obj->$action();實(shí)例化控制器調(diào)用方法2.3框架的單一入口和路由

【案例】隱藏入口文件利用Apache的URL重寫功能,隱藏URL中的“/index.php”開啟重寫編寫重寫配置文件<IfModulemod_rewrite.c>Options+FollowSymlinks-MultiviewsRewriteEngineOnRewriteCond%{REQUEST_FILENAME}!-dRewriteCond%{REQUEST_FILENAME}!-fRewriteRule^(.*)$index.php/$1[QSA,PT,L]</IfModule>2.3框架的單一入口和路由

框架中的路由框架中的路由,可以簡單理解為URL到具體的控制器和方法的映射為項(xiàng)目設(shè)計(jì)一套固定的URL訪問方式,使項(xiàng)目的URL具有獨(dú)立性2.3框架的單一入口和路由

【案例】路由的代碼實(shí)現(xiàn)實(shí)現(xiàn)當(dāng)訪問http://myframe.test/student時映射到student控制器的index()方法在public\index.php文件,定義路由規(guī)則:$route=['student'=>'student/index'];$pathinfo=trim($pathinfo,'/');if(isset($route[$pathinfo])){$pathinfo=$route[$pathinfo];}2.4命名空間命名空間遵循基本標(biāo)識符命名規(guī)則,以數(shù)字、字母和下劃線構(gòu)成,不能以數(shù)字開頭命名空間必須是程序腳本的第1條語句,如果在PHP開始標(biāo)記前有空格都會報“Fatalerror”錯誤提示namespace空間名稱;

命名空間的定義2.4命名空間

命名空間的使用思考:創(chuàng)建兩個PHP文件分別定義不同的命名空間,one命名空間中定義變量和常量,two命名空間直接輸出one命名空間的變量和常量,試想程序輸出結(jié)果2.4命名空間

導(dǎo)入命名空間當(dāng)在一個命名空間中使用其他命名空間中的類和接口時,通過use關(guān)鍵字導(dǎo)入指定的空間,也可以對導(dǎo)入的內(nèi)容使用as關(guān)鍵字設(shè)置別名2.4命名空間從PHP5.6開始,還允許導(dǎo)入函數(shù)和常量,并可為其設(shè)置別名useconst常量名;//導(dǎo)入常量usefunction函數(shù)名;//導(dǎo)入函數(shù)

導(dǎo)入命名空間2.5自動加載第1個參數(shù)表示待注冊的自動加載函數(shù)第2個參數(shù)用于設(shè)置自動加載函數(shù)注冊失敗時是否拋出異常第3個參數(shù)設(shè)置注冊的自動加載函數(shù)添加到隊(duì)列的開頭或結(jié)尾語法格式:bool

spl_autoload_register

([

callable

$autoload_function

[,

bool

$throw

=

TRUE

[,

bool$prepend

=

FALSE

]]])

注冊自動加載函數(shù)2.5自動加載注冊自動加載函數(shù)案例演示spl_autoload_register()函數(shù)的使用functionloader($classname){$filename=substr($classname,strrpos($classname,'\\')+1);$filename=$filename.'.php';if(is_file($filename)){require$filename;}}spl_autoload_register('loader');//自動加載2.4.3節(jié)創(chuàng)建的Container類,調(diào)用student()靜態(tài)方法echoContainer::student();

2.5自動加載注冊多個自動加載函數(shù)案例演示spl_autoload_register()函數(shù)注冊多個自動加載函數(shù)<?phpspl_autoload_register(function($classname){echo'第1個自動加載函數(shù)','<br>';});spl_autoload_register(function($classname){echo'第2個自動加載函數(shù)','<br>';});$obj=newTest();2.5自動加載注冊自動加載方法PHP中還可以將指定的方法注冊為自動加載方法語法格式://注冊靜態(tài)方法,有以下兩種方式spl_autoload_register(['類名','方法名'])spl_autoload_register('類名::方法名')//注冊非靜態(tài)方法,只有一種方式spl_autoload_register([對象,'方法名'])2.5自動加載注冊自動加載方法//注冊靜態(tài)方法spl_autoload_register(['Auto','load01']);spl_autoload_register('Auto::load01');//注冊非靜態(tài)方法$auto=newAuto();spl_autoload_register([$auto,'load02']);classAuto{publicstaticfunctionload01($classname){/*處理自動加載的代碼*/}publicfunctionload02($classname){/*處理自動加載的代碼*/}}2.6代碼規(guī)范

PSR規(guī)范PHP開源框架的開發(fā)者于2009年成立了PHP-FIG(PHP框架互用性小組)用于制定PHP代碼的編寫規(guī)范PSR(PHP推薦標(biāo)準(zhǔn))是PHPFIG組織制定的PHP代碼開發(fā)規(guī)范使PHP框架遵循統(tǒng)一的編碼規(guī)范,避免各家自行發(fā)展的風(fēng)格阻礙PHP的發(fā)展2.6代碼規(guī)范

PSR規(guī)范編號名稱編號名稱PSR-1基礎(chǔ)編碼規(guī)范PSR-11容器接口PSR-2編碼風(fēng)格規(guī)范PSR-13超媒體鏈接PSR-3日志接口規(guī)范PSR-15HTTP請求處理器PSR-4自動加載優(yōu)化規(guī)范PSR-16SimpleCachePSR-6緩存接口規(guī)范PSR-17HTTPFactoriesPSR-7HTTP消息接口規(guī)范PSR-18HTTPClient目前正在使用的PSR標(biāo)準(zhǔn):2.6代碼規(guī)范

PSR規(guī)范PSR標(biāo)準(zhǔn)名稱說明PSR-1PHP腳本的編碼必須以不帶BOM的UTF-8編碼PHP腳本的開始標(biāo)簽必須以<?php或<?=標(biāo)簽開始類名必須遵循大寫開頭的駝峰命名規(guī)范類常量名稱必須全部大寫,多個單詞用下劃線分隔方法名必須符合小寫開頭的駝峰命名規(guī)范PSR-2代碼縮進(jìn)必須使用4個空格符,不能使用【Tab】縮進(jìn)namespace或use關(guān)鍵字namespace或use聲明后必須插入一個空白行類與方法體開始“{”與結(jié)束“}”必須自成一行類的屬性和方法必須添加訪問修飾符PSR-1、PSR-2、PSR-4的部分規(guī)范要求:2.6代碼規(guī)范

PSR規(guī)范PSR-1、PSR-2、PSR-4的部分規(guī)范要求:PSR標(biāo)準(zhǔn)名稱說明PSR-2靜態(tài)方法static必須聲明在訪問修飾符之后PHP腳本的結(jié)束標(biāo)簽純PHP腳本必須省略結(jié)束標(biāo)簽?>PHP腳本必須以一個空白行作為結(jié)束true、false和null必須使用小寫繼承與實(shí)現(xiàn)接口extends和implements必須寫在類名稱的同一行PSR-4命名空間與目錄每個命名空間必須有對應(yīng)的同名目錄,并且必須區(qū)分大小寫文件名與類名一個文件應(yīng)該有一個類,且文件名必須與類名相同2.6代碼規(guī)范

配置VSCode編輯器PHPIntelliSense擴(kuò)展:PHP代碼自動補(bǔ)全函數(shù)參數(shù)提示查找引用查看定義2.6代碼規(guī)范phpcs擴(kuò)展:composerglobalrequiresquizlabs/php_codesniffer打開php文件進(jìn)行測試,如果語法不規(guī)范,編輯器會進(jìn)行提示

當(dāng)有不規(guī)范的代碼時,使用phpcsfixer自動修正。使用Alt+Shift+F快捷鍵修復(fù)

配置VSCode編輯器2.6代碼規(guī)范EditorConfigforVSCode:配置項(xiàng)目的代碼風(fēng)格,創(chuàng)建.editorconfig將php文件的縮進(jìn)設(shè)為4個空格,將html和js文件的縮進(jìn)設(shè)為2個空格[*.php]indent_style=spaceindent_size=4[*.html]indent_style=spaceindent_size=2[*.js]indent_style=spaceindent_size=2

配置VSCode編輯器第3章PHP框架基礎(chǔ)(下)創(chuàng)建自定義框架框架基礎(chǔ)搭建反射異常處理學(xué)習(xí)目標(biāo)熟悉框架底層代碼的實(shí)現(xiàn)12掌握框架中對自動加載和請求的處理方法掌握PHP的異常處理方法3熟悉掌握掌握掌握4掌握PHP中反射的使用目錄?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)框架基礎(chǔ)搭建3.23.1創(chuàng)建自定義框架3.3反射?點(diǎn)擊查看本小節(jié)知識架構(gòu)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)異常處理3.4知識架構(gòu)3.1創(chuàng)建自定義框架1創(chuàng)建目錄結(jié)構(gòu)2使用Composer實(shí)現(xiàn)自動加載3使用Composer管理項(xiàng)目依賴4【案例】創(chuàng)建自己的包知識架構(gòu)3.2框架基礎(chǔ)搭建1App類2Request類3Response類4Container類知識架構(gòu)3.3反射1反射API2案例【利用反射實(shí)現(xiàn)依賴注入】知識架構(gòu)3.4異常處理1異常的拋出和捕獲2自定義異常3多異常捕獲處理4【案例】在框架中處理異常3.1創(chuàng)建自定義框架

創(chuàng)建目錄結(jié)構(gòu)├─app 應(yīng)用目錄│├─HttpHTTP請求目錄││├─Controllers 控制器目錄├─resources 資源目錄│├─views視圖文件目錄├─public 公開目錄├─myframe 框架目錄├─vendorComposer依賴包目錄3.1創(chuàng)建自定義框架

使用Composer實(shí)現(xiàn)自動加載利用Composer提供的功能實(shí)現(xiàn)類的自動加載,創(chuàng)建composer.json文件{"autoload":{"psr-4":{“App\\":"app/"}}}3.1創(chuàng)建自定義框架創(chuàng)建執(zhí)行composerinstall命令安裝依賴關(guān)系所需組件安裝成功后會在當(dāng)前目錄下生成一個vendor目錄

使用Composer實(shí)現(xiàn)自動加載3.1創(chuàng)建自定義框架引入自動加載文件vendor/autoload.php在控制器和模型定義命名空間,使用use關(guān)鍵字導(dǎo)入命名空間測試自動加載功能是否已經(jīng)實(shí)現(xiàn)

使用Composer實(shí)現(xiàn)自動加載3.1創(chuàng)建自定義框架創(chuàng)建Composer可以自動完成各種依賴包的下載和安裝以fengqi/hanzi為例進(jìn)行演示

使用Composer管理項(xiàng)目依賴composerrequirefengqi/hanzi=0.1.23.1創(chuàng)建自定義框架依賴包的版本號:

使用Composer管理項(xiàng)目依賴名稱實(shí)例描述特定的版本3.1.33指定包的版本是是3.1.33某個范圍的版本>=3.1>=2.6,<3.0>=2.6,<3.0|>=3.1包的版本大于等于3.1包的版本大于等于2.6,且小于3.0包的版本大于等于2.6,且小于3.0;或包的版本大于等于3.1通配符方式3.1.*與>=3.1,<3.2表達(dá)的含義等價3.1創(chuàng)建自定義框架使用依賴包,將Hanzi類導(dǎo)入后,編寫test()方法,測試Hanzi類usefengqi\Hanzi\Hanzi;publicfunctiontest(){$str='測試';print_r(Hanzi::pinyin($str));echo'<br>';echoHanzi::turn($str);}

使用Composer管理項(xiàng)目依賴array([py]=>cs[pinyin]=>ceshi)測試3.1創(chuàng)建自定義框架使用Composer創(chuàng)建自己的包,用于實(shí)現(xiàn)對數(shù)據(jù)JSON編碼和解碼的操作<?phpnamespaceCustomPHPJson;classJson{publicstaticfunctionencode($data){returnjson_encode($data);}publicstaticfunctiondecode($jsonData){returnjson_decode($jsonData,true);}}【案例】創(chuàng)建自己的包3.1創(chuàng)建自定義框架創(chuàng)建composer.json文件,編寫包的初始信息{"name":"custom-php-json/custom-php-json","description":"PHPlibrarytoencodeanddecodeJSON","license":"MITLicense","authors":[{"name":"myname","email":"myname@mytp.test"}],"minimum-stability":"stable",

……}【案例】創(chuàng)建自己的包3.1創(chuàng)建自定義框架在本地環(huán)境中測試,在項(xiàng)目目錄中安裝依賴關(guān)系所需組件,初始化自動加載信息C:\web\apache2.4\htdocs>cdcustom-php-jsonC:\web\apache2.4\htdocs\custom-php-json>composerinstallLoadingcomposerrepositorieswithpackageinformationUpdatingdependencies(includingrequire-dev)NothingtoinstallorupdateGeneratingautoloadfiles【案例】創(chuàng)建自己的包3.1創(chuàng)建自定義框架創(chuàng)建測試文件<?phprequire'./vendor/autoload.php';$data=[[1,'Tom'],[2,'Lucy']];var_dump(CustomPHPJson\Json::encode($data));//輸出結(jié)果:string(22)"[[1,"Tom"],[2,"Lucy"]]"【案例】創(chuàng)建自己的包3.2框架基礎(chǔ)搭建

App類App類的含義是應(yīng)用,它主要負(fù)責(zé)應(yīng)用啟動,App類需要完成的工作:創(chuàng)建App類路由檢測請求分發(fā)3.2框架基礎(chǔ)搭建

App類路由檢測:$path=isset($_SERVER['PATH_INFO'])?$_SERVER['PATH_INFO']:'';$path=trim($path,'/');$controller=dirname($path);$action=basename($path);$arr=explode('/',ucwords($controller,'/'));$controller=implode('\\',$arr).'Controller';$arr[]=$action;foreach($arras$v){if(!preg_match('/^[A-Za-z]\w{0,20}$/',$v)){exit('請求參數(shù)包含特殊字符!');}}return[$controller,$action];3.2框架基礎(chǔ)搭建

App類請求分發(fā):list($controller,

$action)

=

$dispatch;$instance

=

$this->controller($controller);$instance->$action();創(chuàng)建控制器的實(shí)例使用控制器實(shí)例調(diào)用方法3.2框架基礎(chǔ)搭建

Request類Request類負(fù)責(zé)獲取$_GET、$_POST、$_SERVER等超全局變量中的數(shù)據(jù)創(chuàng)建Request類編寫方法分別獲取$_GET、$_POST、$_SERVER中的數(shù)據(jù)在其他類中使用Request類3.2框架基礎(chǔ)搭建

Response類Response類負(fù)責(zé)響應(yīng)信息,將所有響應(yīng)輸出的代碼全部封裝起來創(chuàng)建Request類,定義響應(yīng)狀態(tài)碼、響應(yīng)頭和數(shù)據(jù)屬性編寫輸出數(shù)據(jù)和創(chuàng)建本類對象的方法在其他類中使用Response類輸出內(nèi)容3.2框架基礎(chǔ)搭建

Container類Container類表示容器,用來創(chuàng)建對象當(dāng)創(chuàng)建相同類的對象的時候,如果容器中存在,則直接返回,不會重復(fù)創(chuàng)建創(chuàng)建Container類編寫方法用來創(chuàng)建實(shí)例對象在其他類中使用Container類實(shí)例化類3.3反射

反射API創(chuàng)建反射API提供的相關(guān)類與接口:類/接口說明備注Reflection反射類其參數(shù)是Reflector接口Reflector定義的反射接口被所有可導(dǎo)出的反射類實(shí)現(xiàn)ReflectionClass獲取一個類的有關(guān)信息實(shí)現(xiàn)Reflector接口ReflectionObject獲取一個對象相關(guān)信息繼承自ReflectionClass類ReflectionMethod獲取一個方法有關(guān)信息繼承ReflectionFunctionAbstractReflectionProperty獲取類的屬性相關(guān)信息實(shí)現(xiàn)Reflector接口ReflectionParameter獲取函數(shù)或方法參數(shù)的相關(guān)信息實(shí)現(xiàn)Reflector接口ReflectionExtension獲取一個擴(kuò)展有關(guān)信息實(shí)現(xiàn)Reflector接口ReflectionFunction獲取一個函數(shù)有關(guān)信息繼承自ReflectionFunctionAbstractReflectionFunctionAbstractReflectionFunction父類實(shí)現(xiàn)Reflector接口ReflectionException用于反射異常處理實(shí)現(xiàn)Reflector接口ReflectionClassConstant獲取類常量的信息實(shí)現(xiàn)Reflector接口ReflectionType獲取參數(shù)或返回值類型反射相關(guān)類方法返回值類型3.3反射

反射API反射API提供的常用的方法:類名方法名

功能描述ReflectionClassgetMethod()獲取一個類方法的ReflectionMethod對象getName()獲取類名getConstructor()獲取類的構(gòu)造函數(shù)getProperties()獲取一組屬性hasMethod()檢查方法是否已定義hasProperty()檢查屬性是否已定義newInstance()通過指定的參數(shù)創(chuàng)建一個新的類實(shí)例newInstanceArgs()通過數(shù)組參數(shù)創(chuàng)建一個新的類實(shí)例ReflectionMethodinvoke()實(shí)現(xiàn)執(zhí)行操作invokeArgs()帶參數(shù)執(zhí)行isPublic()判斷方法是否是公開方法ReflectionFunctionAbstractgetNumberOfParameters()獲取參數(shù)數(shù)目getParameters獲取參數(shù)3.3反射

反射API類名方法名

功能描述ReflectionPropertygetDocComment()獲取屬性文檔注釋getName()獲取屬性名稱getValue()獲取屬性值isDefault()檢查屬性是否為默認(rèn)屬性isPrivate()檢查屬性是否是私有屬性isProtected()檢查屬性是否是保護(hù)屬性isPublic()檢查屬性是否是公有屬性isStatic()檢查屬性是否是靜態(tài)屬性ReflectionParametergetClass()獲得類型提示類getDefaultValue()獲取默認(rèn)屬性值ReflectionExtensiongetFunctions()獲取擴(kuò)展中的函數(shù)getINIEntries()獲取ini配置getVersion()獲取擴(kuò)展版本號info()輸出擴(kuò)展信息3.3反射

【案例】利用反射實(shí)現(xiàn)依賴注入構(gòu)造方法的依賴注入:在Container類的make()方法創(chuàng)建對象前,先使用反射獲取給定類的構(gòu)造方法的參數(shù),然后從參數(shù)中獲知該構(gòu)造方法依賴哪些對象普通方法的依賴注入:普通方法依賴某個類時,也可以通過參數(shù)來依賴注入3.4異常處理創(chuàng)建案例演示異常處理的使用:<?phpfunctiondivision($num1,$num2){if(!$num2){$e=newException('除數(shù)不能為0');throw$e; echo'拋出異常后,后面的代碼不執(zhí)行。';}return$num1/$num2;}

異常的拋出和捕獲3.4異常處理try{echodivision(1,0); echo'當(dāng)上一行代碼拋出異常時,后面的代碼不會執(zhí)行';}catch(Exception$e){ echo$e->getMessage(); }finally{echo'<br>異常處理完成'; }echo'<br>將異常處理完成后,后面的代碼會繼續(xù)執(zhí)行';調(diào)用division()函數(shù),查看運(yùn)行結(jié)果:

異常的拋出和捕獲3.4異常處理

自定義異常Exception異常類提供的方法:名稱說明getFile()創(chuàng)建異常時的程序文件名稱getLine()獲取創(chuàng)建的異常所在文件中的行號ThrowablegetPrevious()返回異常鏈中的前一個異常getTrace()獲取異常追蹤信息getTraceAsString()獲取字符串類型的異常追蹤信息3.4異常處理

自定義異常演示getLine()和getFile()方法的使用:try{thrownewException('errormessage');}catch(Exception$e){echo'發(fā)生異常的行號:'.$e->getLine();echo'<br>發(fā)生異常的文件名:'.$e->getFile();}3.4異常處理

自定義異常案例演示自定義異常,創(chuàng)建MyException.php:<?phpclassMyExceptionextendsException{protected$msg='自定義異常信息';publicfunctiongetCustomMessage(){return$this->getMessage()?:$this->msg;}}3.4異常處理

自定義異常<?phprequire'./MyException.php';$email='thinkphp.test';try{if(!filter_var($email,FILTER_VALIDATE_EMAIL)){thrownewMyException('email地址不合法');}}catch(MyException$e){echo$e->getCustomMessage();//輸出結(jié)果:email地址不合法}3.4異常處理

多異常捕獲處理<?phprequire'./MyException.php';$email='tom@';try{if(!filter_var($email,FILTER_VALIDATE_EMAIL)){thrownewException('email地址不合法');}elseif(substr($email,strrpos($email,'@')+1)===''){thrownewMyException('不能使用作為郵箱地址');}}catch(MyException$e){//輸出結(jié)果:不能使用作為郵箱地址echo$e->getCustomMessage();}catch(Exception$e){echo$e->getMessage();//這行代碼不會執(zhí)行}3.4異常處理

多異常捕獲處理嵌套異常的捕獲處理:<?phprequire'./MyException.php';try{try{thrownewException();}catch(Exception$e){thrownewMyException('發(fā)生異常,請稍后再試');}}catch(MyException$e){//輸出結(jié)果:發(fā)生異常,請稍后再試echo$e->getMessage();}3.4異常處理

在框架中處理異常創(chuàng)建修改mytp.test項(xiàng)目的framework/library/mytp/App.php文件將exit()方法刪除,使用Exception()拋出異常exit('請求參數(shù)包含特殊字符!');thrownewException('請求參數(shù)包含特殊字符!');3.4異常處理

在框架中處理異常exit('請求的控制器'.$class.'不存在!');thrownewException('請求的控制器'.$class.'不存在!');3.4異常處理

在框架中處理異常exit('操作不存在:'.get_class($instance).'/'.$action.'()');thrownewException('操作不存在:'.get_class($instance).'/'.$action.'()');第4章數(shù)據(jù)庫和模板引擎PDO擴(kuò)展封裝DB類封裝Model類Smarty模板引擎學(xué)習(xí)目標(biāo)熟悉框架中對數(shù)據(jù)庫操作類的封裝方法12掌握PDO擴(kuò)展的使用方法掌握模板引擎的使用方法3熟悉掌握掌握目錄?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)封裝DB類4.24.1PDO擴(kuò)展4.3封裝Model類?點(diǎn)擊查看本小節(jié)知識架構(gòu)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)Smarty模板引擎4.4知識架構(gòu)4.1PDO擴(kuò)展1開啟PDO擴(kuò)展2連接和選擇數(shù)據(jù)庫3執(zhí)行SQL語句4處理結(jié)果集知識架構(gòu)4.1PDO擴(kuò)展5預(yù)處理機(jī)制6為占位符綁定數(shù)據(jù)7PDO錯誤處理8PDO事務(wù)處理知識架構(gòu)4.2【案例】封裝DB類1連接數(shù)據(jù)庫2封裝查詢類操作3封裝執(zhí)行類操作知識架構(gòu)4.3【案例】封裝Model類1初始化表名2查詢數(shù)據(jù)3新增數(shù)據(jù)4修改數(shù)據(jù)5刪除數(shù)據(jù)知識架構(gòu)4.4Smarty模板引擎1安裝Smarty2在框架中使用Smarty3Smarty常用模板語法4.1PDO擴(kuò)展

開啟PDO擴(kuò)展在php.ini中找到“;extension=pdo_mysql”去掉分號注釋開啟擴(kuò)展修改后重啟Apache4.1PDO擴(kuò)展

連接和選擇數(shù)據(jù)庫使用PDO操作數(shù)據(jù)庫前,先實(shí)例化PDO類,傳遞數(shù)據(jù)庫連接參數(shù)基本語法:PDO::__construct(

string$dsn, //數(shù)據(jù)源名稱

string$username, //用戶名(可選)string$password, //密碼(可選)

array$driver_options//包含鍵值的驅(qū)動連接選項(xiàng))4.1PDO擴(kuò)展

連接和選擇數(shù)據(jù)庫PDO連接本地的MySQL服務(wù)器,選擇myframe數(shù)據(jù)庫$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');var_dump($pdo);//輸出結(jié)果:object(PDO)#1(0){}4.1PDO擴(kuò)展

執(zhí)行SQL語句PDO提供了query()和exec()方法用于執(zhí)行SQL語句query()執(zhí)行成功時返回PDOStatement類的對象,該對象主要用于解析結(jié)果集、實(shí)現(xiàn)預(yù)處理和事務(wù)處理等特殊功能exec()執(zhí)行成功后返回受影響行數(shù),此方法不會對SELECT語句返回結(jié)果4.1PDO擴(kuò)展

處理結(jié)果集fetch()方法:基本語法:mixedPDOStatement::fetch(int$fetch_style,//返回方式(可選)

//滾動游標(biāo)(可選)int$cursor_orientation=PDO::FETCH_ORI_NEXT,int$cursor_offset=0//游標(biāo)的偏移量(可選))4.1PDO擴(kuò)展PDO::FETCH_*常用常量

處理結(jié)果集常量名說明PDO::FETCH_ASSOC返回一個鍵為結(jié)果集字段名的關(guān)聯(lián)數(shù)組PDO::FETCH_BOTH(默認(rèn))返回一個索引為結(jié)果集列名和以0開始的列號的數(shù)組PDO::FETCH_LAZY返回一個包含關(guān)聯(lián)數(shù)組、數(shù)字索引數(shù)組和對象的結(jié)果PDO::FETCH_NUM返回一個索引為以0開始的結(jié)果集列號的數(shù)組PDO::FETCH_CLASS返回一個請求類的新實(shí)例,映射結(jié)果集中的列名到類中對應(yīng)的屬性名PDO::FETCH_OBJ返回一個屬性名對應(yīng)結(jié)果集列名的匿名對象4.1PDO擴(kuò)展

處理結(jié)果集fetchColumn()方法:基本語法:stringPDOStatement::fetchColumn([int$column_number=0])4.1PDO擴(kuò)展

處理結(jié)果集fetchAll()方法:基本語法:arrayPDOStatement::fetchAll(int$fetch_style, //返回方式(可選)mixed$fetch_argument,//滾動游標(biāo)(可選)array$ctor_args=array()//PDO::FETCH_CLASS參數(shù))4.1PDO擴(kuò)展$fetch_argument參數(shù)的意義:

處理結(jié)果集$fetch_style取值$fetch_argument的意義PDO::FETCH_COLUMN返回指定以0開始索引的列PDO::FETCH_CLASS返回指定類的實(shí)例,映射每行的列到類中對應(yīng)的屬性名PDO::FETCH_FUNC將每行的列作為參數(shù)傳遞給指定函數(shù),返回調(diào)用函數(shù)后的結(jié)果4.1PDO擴(kuò)展

PDO預(yù)處理機(jī)制prepare()方法用于準(zhǔn)備預(yù)處理的SQL語句,執(zhí)行成功時返回PDOStatement類對象基本語法:publicPDOStatementPDO::prepare(

//預(yù)處理的SQL語句

string$statement,

//設(shè)置一個或多個PDOStatement對象的屬性值(可選)array$driver_options=array())4.1PDO擴(kuò)展

PDO預(yù)處理機(jī)制execute()方法用于執(zhí)行一條預(yù)處理語句基本語法:bool

PDOStatement::execute([array$input_parameters])4.1PDO擴(kuò)展

為占位符綁定數(shù)據(jù)bindParam()方法支持問號占位符和參數(shù)占位符將占位符綁定到指定的變量名上在execute()執(zhí)行預(yù)處理語句時,只要修改變量名的值即可//綁定問號占位符$stmt->bindParam(1,$name);$stmt->bindParam(2,$entry_date);//綁定參數(shù)占位符$stmt->bindParam('參數(shù)標(biāo)識符名',$name);$stmt->bindParam('參數(shù)標(biāo)識符名',$entry_date);4.1PDO擴(kuò)展

為占位符綁定數(shù)據(jù)bindValue()方法在使用時是將值綁定到占位符上執(zhí)行execute()執(zhí)行預(yù)處理語句//綁定問號占位符$stmt->bindValue(1,'Charles');$stmt->bindValue(2,'2019-1-1');$stmt->execute();//綁定參數(shù)占位符$stmt->bindValue('參數(shù)標(biāo)識符名','Charles');$stmt->bindValue('參數(shù)標(biāo)識符名','2019-1-1');$stmt->execute();4.1PDO擴(kuò)展

PDO錯誤處理SILENT模式(默認(rèn)):此模式在錯誤發(fā)生時不進(jìn)行任何操作,只簡單的設(shè)置錯誤代碼WARNING模式:在項(xiàng)目的調(diào)試期間,可以查看發(fā)生了什么問題且不中斷程序的流程,當(dāng)錯誤發(fā)生時,PDO會發(fā)出一條E_WARNING信息EXCEPTION模式:在錯誤發(fā)生時拋出相關(guān)異常。它在項(xiàng)目調(diào)試中較為實(shí)用可以快速的找到代碼中問題的潛在區(qū)域4.1PDO擴(kuò)展

PDO錯誤處理設(shè)置為SILENT模式$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_SILENT);設(shè)置為WARNING模式$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);設(shè)置為EXCEPTION模式$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);4.1PDO擴(kuò)展

PDO錯誤處理<?php$dsn='mysql:host=localhost;port=3306;dbname=mytp;charset=utf8';$pdo=newPDO($dsn,'root','123456');$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);//預(yù)處理SQL語句$stmt=$pdo->prepare('SELECT*FROM`test`');//執(zhí)行預(yù)處理語句,若execute()方法返回false,表示執(zhí)行失敗if(false===$stmt->execute()){echo'錯誤碼:'.$stmt->errorCode().'<br>';//輸出錯誤碼print_r($stmt->errorInfo());//輸出錯誤信息}使用PDO操作數(shù)據(jù)庫前,先實(shí)例化PDO類,傳遞數(shù)據(jù)庫連接參數(shù)4.1PDO擴(kuò)展

PDO錯誤處理WARNING模式案例輸出結(jié)果:4.1PDO擴(kuò)展

PDO事務(wù)處理PDO類事務(wù)相關(guān)的操作方法方法名說明PDO::beginTransaction()啟動一個事務(wù)PDO::commit()提交一個事務(wù)PDO::inTransaction()檢查是否在一個事務(wù)內(nèi)PDO::rollBack()回滾一個事務(wù)4.1PDO擴(kuò)展

PDO事務(wù)處理案例演示事務(wù)的使用:$pdo->beginTransaction();try{$stmt=$pdo->prepare('INSERTINTO`student`(`name`)VALUES(?)');$stmt->execute(['小明']);$pdo->commit();}catch(PDOException$e){$pdo->rollBack();echo'執(zhí)行失?。?.$e->getMessage();}4.2【案例】封裝DB類

連接數(shù)據(jù)庫DB類的主要負(fù)責(zé)數(shù)據(jù)庫操作,職責(zé)包括:連接數(shù)據(jù)庫執(zhí)行SQL語句處理結(jié)果集4.2【案例】封裝DB類

連接數(shù)據(jù)庫實(shí)現(xiàn)思路:創(chuàng)建DB類,實(shí)現(xiàn)getInstance()用來連接數(shù)據(jù)庫,init()用來傳入連接配置編寫initPDO()方法,用來實(shí)例化PDO對象,連接數(shù)據(jù)庫在控制器中調(diào)用DB類getInsance()方法,查看是否實(shí)現(xiàn)連接數(shù)據(jù)庫的功能4.2【案例】封裝DB類

封裝查詢類操作查詢類操作是指SELECT這種有結(jié)果集的操作在DB類中實(shí)現(xiàn)查詢一條或多條數(shù)據(jù)的方法在控制器中使用DB類中的查詢類的方法4.2【案例】封裝DB類

封裝執(zhí)行類操作執(zhí)行類操作包括INSERT、UPDATE、DELETE,執(zhí)行后會返回受影響的行數(shù)并提供獲取自動增長字段最后插入的id值在DB類中實(shí)現(xiàn)執(zhí)行查詢的方法和獲取最后插入數(shù)據(jù)id的方法在控制器中使用DB類中的執(zhí)行類的方法4.3【案例】封裝Model類

初始化表名創(chuàng)建Model類,實(shí)現(xiàn)初始化表名功能當(dāng)子類繼承Model類時,在子類中可以自定義表名如果沒有自定義表名,則自動將子類的類名轉(zhuǎn)換為表名4.3【案例】封裝Model類

查詢數(shù)據(jù)get()用來查詢多條記錄,參數(shù)為字段數(shù)組,如果省略參數(shù),表示所有字段first()用來查詢一條記錄,參數(shù)為字段數(shù)組,如果省略參數(shù),表示所有字段value()用來查詢單個字段,參數(shù)為字段名4.3【案例】封裝Model類

新增數(shù)據(jù)insert()新增的數(shù)據(jù)以數(shù)組傳入,返回的結(jié)果是新增的記錄數(shù)insertGetId()新增的數(shù)據(jù)以數(shù)組傳入,返回的結(jié)果是最后插入的ID4.3【案例】封裝Model類

修改數(shù)據(jù)編寫修改數(shù)據(jù)的update()方法將要修改的數(shù)據(jù)以數(shù)組的形式傳入即可,返回的結(jié)果為受影響的行數(shù)update()方法的使用:$student->where('id',

5)->update([

'name'

=>

'new',

'gender'

=>

'男']);4.3【案例】封裝Model類

刪除數(shù)據(jù)編寫刪除數(shù)據(jù)的delete()方法,用來執(zhí)行DELETE語句其返回結(jié)果為被刪除的條數(shù)delete()方法的使用:$count=$student->where('id','>','4')->delete();4.4模板引擎使用Composer可以為項(xiàng)目安裝Smarty模板引擎:composerrequiresmarty/smarty=~3.1

安裝Smarty4.4模板引擎打開vendor/smarty/smarty/libs,Smarty的libs目錄文件介紹:

安裝Smarty名稱說明Smarty.class.phpSmarty核心類文件,用于實(shí)現(xiàn)Smarty模板引擎的功能SmartyBC.class.phpSmarty為了向前兼容Smarty2版本而設(shè)置了這個類Autoloader.phpSmarty中實(shí)現(xiàn)自動載入文件功能的類debug.tplSmarty中的debug模板文件plugins自定義插件目錄,存放各類自定義插件的目錄sysplugins存放系統(tǒng)文件目錄4.4模板引擎配置模板文件目錄和編譯文件目錄創(chuàng)建基礎(chǔ)控制器類,將Smarty的初始化代碼寫在該類的構(gòu)造方法中其他控制器類繼承基礎(chǔ)控制器類,就能使用Smarty

在框架中使用Smarty4.4模板引擎

在框架中使用Smartypublicfunctiontest(){//調(diào)用assign()方法為模板中的變量賦值,格式為assign(變量名,值)$this->Smarty->assign('title','Smarty');$this->Smarty->assign('desc','Smarty是一個PHP的模板引擎');//調(diào)用fetch()方法渲染模板文件,返回渲染的HTML結(jié)果字符串return$this->Smarty->fetch('test.html');}4.4模板引擎創(chuàng)建test.html文件:<!DOCTYPEhtml><html><head><metacharset="UTF-8"><title>Smarty示例</title></head><body><h1>Hello{$title}</h1><p>{$desc}</p></body></html>

在框架中使用Smarty4.4模板引擎

Smarty常用模板語法將數(shù)據(jù)庫查詢結(jié)果輸出到模板中,通過foreach遍歷一個數(shù)組或?qū)ο髞韺?shí)現(xiàn)在頁面中需要進(jìn)行判斷,則使用if語句來實(shí)現(xiàn)4.4模板引擎

Smarty常用模板語法foreach語句使用示例:{foreach$studentas$v}<tr><td>{$}</td><td>{$v.gender}</td></tr>{/foreach}4.4模板引擎

Smarty常用模板語法if語句使用示例:{if$v.gender=='男'}<fontcolor="red">{$}</font>{else}{$}{/if}第5章內(nèi)容管理系統(tǒng)(上)項(xiàng)目展示后臺用戶登錄驗(yàn)證碼后臺頁面搭建欄目管理學(xué)習(xí)目標(biāo)掌握運(yùn)用框架進(jìn)行項(xiàng)目開發(fā)的方法12掌握在框架中對表單進(jìn)行處理的方法掌握驗(yàn)證碼功能的開發(fā)方法3掌握掌握掌握掌握4掌握會話技術(shù)的使用方法目錄?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)后臺用戶登錄5.25.1項(xiàng)目展示5.3驗(yàn)證碼?點(diǎn)擊查看本小節(jié)知識架構(gòu)目錄?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)?點(diǎn)擊查看本節(jié)相關(guān)知識點(diǎn)欄目管理5.55.4后臺頁面搭建知識架構(gòu)5.2后臺用戶登錄1創(chuàng)建用戶表2顯示登錄頁面3Ajax交互4接收登錄表單5判斷登錄狀態(tài)6退出登錄知識架構(gòu)5.3驗(yàn)證碼1編寫驗(yàn)證碼類2輸出驗(yàn)證碼圖像3判斷驗(yàn)證碼是否正確知識架構(gòu)5.4后臺頁面搭建1后臺布局2左側(cè)菜單3后臺首頁知識架構(gòu)5.5欄目管理1創(chuàng)建欄目表2顯示欄目列表3添加和修改欄目4刪除欄目

項(xiàng)目展示前臺首頁:頂部是導(dǎo)航欄,導(dǎo)航欄左側(cè)是網(wǎng)站的LOGO,右側(cè)是欄目菜單導(dǎo)航欄的下

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論