PHP網(wǎng)站開發(fā)實例教程(第3版) 課件 第9-11章 PDO擴展和Smarty模板引擎、項目實戰(zhàn)-內(nèi)容管理系統(tǒng)、Laravel框架_第1頁
PHP網(wǎng)站開發(fā)實例教程(第3版) 課件 第9-11章 PDO擴展和Smarty模板引擎、項目實戰(zhàn)-內(nèi)容管理系統(tǒng)、Laravel框架_第2頁
PHP網(wǎng)站開發(fā)實例教程(第3版) 課件 第9-11章 PDO擴展和Smarty模板引擎、項目實戰(zhàn)-內(nèi)容管理系統(tǒng)、Laravel框架_第3頁
PHP網(wǎng)站開發(fā)實例教程(第3版) 課件 第9-11章 PDO擴展和Smarty模板引擎、項目實戰(zhàn)-內(nèi)容管理系統(tǒng)、Laravel框架_第4頁
PHP網(wǎng)站開發(fā)實例教程(第3版) 課件 第9-11章 PDO擴展和Smarty模板引擎、項目實戰(zhàn)-內(nèi)容管理系統(tǒng)、Laravel框架_第5頁
已閱讀5頁,還剩204頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章PDO擴展和Smarty模板引擎《PHP網(wǎng)站開發(fā)實例教程(第3版)》學習目標/Target

掌握PDO擴展的使用方法,能夠使用PDO擴展操作數(shù)據(jù)庫。

掌握數(shù)據(jù)庫操作類的封裝,能夠在自定義框架中封裝數(shù)據(jù)庫操作類。

掌握Smarty模板引擎的使用方法,能夠在自定義框架中使用Smarty模板引擎。章節(jié)概述/Summary在第7章和第8章中,我們已經(jīng)創(chuàng)建好了自定義框架并且完成了框架的基本功能。為了能夠在框架中操作數(shù)據(jù)庫和渲染數(shù)據(jù),本章將介紹PDO擴展和Smarty模板引擎,在自定義框架中封裝數(shù)據(jù)庫操作類和使用Smarty模板引擎。目錄/Contents9.19.29.3PDO擴展在自定義框架中封裝數(shù)據(jù)庫操作類Smarty模板引擎PDO擴展9.1

先定一個小目標!了解開啟PDO擴展的方法,能夠開啟PDO擴展。9.1.1開啟PDO擴展PDO擴展為PHP操作數(shù)據(jù)庫定義了一個輕量級的接口,從而可以用一套相同的接口操作不同的數(shù)據(jù)庫。目前支持的數(shù)據(jù)庫包括Firebird、FreeTDS、MySQL、MicrosoftSQLServer、Oracle、PostgreSQL、SQLite、Sybase等。9.1.1開啟PDO擴展PDO支持的每個數(shù)據(jù)庫都對應不同的擴展文件。如果想讓PDO支持MySQL數(shù)據(jù)庫,需要修改如下配置:extension=pdo_mysql9.1.1開啟PDO擴展

先定一個小目標!掌握連接和選擇數(shù)據(jù)庫的方法,能夠使用PDO類連接和選擇數(shù)據(jù)庫。9.1.2連接和選擇數(shù)據(jù)庫PDO擴展提供了PDO類,能夠用于連接和操作數(shù)據(jù)庫。使用PDO類操作數(shù)據(jù)庫前,需要先實例化PDO類,傳遞連接數(shù)據(jù)庫的參數(shù):語法格式PDO::__construct(

string$dsn, //數(shù)據(jù)源名稱 string$username,//用戶名(可選參數(shù))string$password,//密碼(可選參數(shù)) array$driver_options //包含鍵值的驅動連接選項(可選參數(shù)))9.1.2連接和選擇數(shù)據(jù)庫$dsn由PDO驅動程序名稱、冒號和PDO驅動程序特有的連接語法組成。例如,連接MySQL數(shù)據(jù)庫時,PDO驅動程序名稱為mysql,它特有的連接語法包括主機名、端口號、數(shù)據(jù)庫名稱、字符集等;連接Oracle數(shù)據(jù)庫時,PDO驅動程序名稱為oci,它特有的連接語法只包括數(shù)據(jù)庫名稱和字符集。MySQL數(shù)據(jù)庫和Oracle數(shù)據(jù)庫的$dsn如下:$mysqldsn='mysql:host=主機名;port=端口號;dbname=數(shù)據(jù)庫名稱;charset=字符集';$oracledsn='oci:dbname=數(shù)據(jù)庫名稱;charset=字符集';9.1.2連接和選擇數(shù)據(jù)庫創(chuàng)建pdo01.php文件,使用PDO連接MySQL服務器并選擇myframe數(shù)據(jù)庫:<?php$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');var_dump($pdo);//輸出結果:object(PDO)#1(0){}9.1.2連接和選擇數(shù)據(jù)庫

先定一個小目標!掌握執(zhí)行SQL語句的方法,能夠使用query()方法和exec()方法執(zhí)行SQL語句。9.1.3執(zhí)行SQL語句PDO類對象的query()方法和exec()方法用于執(zhí)行SQL語句。這兩個方法的區(qū)別:query()方法返回的是PDOStatement類對象,該對象主要用于解析結果集、實現(xiàn)預處理和事務處理等;exec()方法返回的是受影響行數(shù),使用exec()方法執(zhí)行SELECT語句時不會返回查詢結果。通常使用query()方法執(zhí)行查詢類的SQL語句;使用exec()方法執(zhí)行操作類的SQL語句。執(zhí)行SQL語句后,使用lastInsertId()方法獲取最后插入行的id值。9.1.3執(zhí)行SQL語句修改pdo01.php文件,使用query()方法和exec()方法執(zhí)行SQL語句:<?php$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');$sql='SELECT*FROM`student`';var_dump($pdo->query($sql));//輸出結果:object(PDOStatement)#2(1){["queryString"]=>string(23)"SELECT*FROM`student`"}$sql="INSERTINTO`student`(`name`)VALUES('Leon')";var_dump($pdo->exec($sql)); //輸出結果:int(1)var_dump($pdo->lastInsertId()); //輸出結果:string(1)"5"9.1.3執(zhí)行SQL語句

先定一個小目標!掌握處理結果集的方法,能夠使用不同方法處理結果集。9.1.4處理結果集使用query()方法執(zhí)行SQL語句后,返回的結果是PDOStatement類對象。通過PDOStatement類對象可以對結果集進行處理,常用的處理結果集的方法有fetch()、fetchColumn()和fetchAll()。下面對這3個方法分別進行講解。9.1.4處理結果集1.fetch()fetch()方法用于從結果集中獲取下一行數(shù)據(jù)。9.1.4處理結果集語法格式PDOStatement::fetch(int$mode=PDO::FETCH_DEFAULT, //返回方式(可選參數(shù))int$cursorOrientation=PDO::FETCH_ORI_NEXT,//可滾動游標(可選參數(shù))int$cursorOffset=0

//游標的偏移量(可選參數(shù)))$mode的值必須是PDO::FETCH_*系列常量中的一個,$mode的可選值:9.1.4處理結果集可選值說明返回值PDO::FETCH_ASSOC以關聯(lián)數(shù)組的方式提取結果集中的數(shù)據(jù)每一行的數(shù)據(jù)將被返回為一個關聯(lián)數(shù)組,其中鍵是列名,值是對應的數(shù)據(jù)值PDO::FETCH_NUM以索引數(shù)組的方式提取結果集中的數(shù)據(jù)每一行的數(shù)據(jù)將被返回為一個索引數(shù)組,其中索引從0開始,值為對應的數(shù)據(jù)值PDO::FETCH_BOTH同時以關聯(lián)數(shù)組和索引數(shù)組的方式提取結果集中的數(shù)據(jù)每一行的數(shù)據(jù)將被返回為一個混合數(shù)組,其中既包含字符串鍵名也包含數(shù)字鍵名,即每個列名對應兩個鍵名PDO::FETCH_OBJ以匿名對象的方式提取結果集中的數(shù)據(jù)每一行的數(shù)據(jù)將被返回為一個匿名對象,其中屬性名對應列名,屬性值對應數(shù)據(jù)值1/2$mode的值必須是PDO::FETCH_*系列常量中的一個,$mode的可選值:9.1.4處理結果集可選值說明返回值PDO::FETCH_LAZY以延遲加載的方式提取結果集中的數(shù)據(jù),只有在訪問數(shù)據(jù)時才會從數(shù)據(jù)庫中取出在訪問數(shù)據(jù)時,會返回一個包含該行數(shù)據(jù)的對象,對象的屬性名對應列名,屬性值對應數(shù)據(jù)值PDO::FETCH_BOUND將結果集中的列值分配給PDOStatement::bindColumn()方法綁定的變量返回true,并分配結果集中的列值給PDOStatement::bindColumn()方法綁定的PHP變量PDO::FETCH_CLASS將結果集中的數(shù)據(jù)映射為指定請求類的實例返回一個請求類的實例,其中的屬性會被賦值為結果集中對應的列值PDO::FETCH_INTO將結果集中的數(shù)據(jù)映射為指定被請求類的實例返回一個被請求類已存在的實例,其中命名的屬性會被賦值為結果集中對應的列2/2創(chuàng)建pdo02.php文件,使用fetch()方法獲取查詢的數(shù)據(jù)的代碼及運行結果:<?php$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');$sql='SELECT`id`,`name`FROM`student`LIMIT2';$res=$pdo->query($sql);while($row=$res->fetch(PDO::FETCH_ASSOC)){echo$row['id'].'-'.$row['name'].'<br>';}9.1.4處理結果集2.fetchColumn()fetchColumn()方法用于獲取結果集中的單獨一列,該方法執(zhí)行成功返回獲取的數(shù)據(jù),執(zhí)行失敗返回false。9.1.4處理結果集語法格式stringPDOStatement::fetchColumn(int$column=0)修改pdo02.php文件,使用fetchColumn()方法獲取結果集中的第2列數(shù)據(jù):while($column=$res->fetchColumn(1)){echo''.$column; //輸出結果:AllenJames}9.1.4處理結果集3.fetchAll()fetchAll()方法用于獲取結果集中所有的行數(shù)據(jù)。9.1.4處理結果集語法格式arrayPDOStatement::fetchAll(int$mode, //返回方式(可選參數(shù))mixed$fetch_argument, //可滾動游標(可選參數(shù))array$ctor_args=array() //PDO::FETCH_CLASS的參數(shù)(可選參數(shù)))$fetch_argument根據(jù)$mode參數(shù)值的變化而有不同意義,$mode的可選值:9.1.4處理結果集可選值作用返回值PDO::FETCH_COLUMN提取結果集中的單個列的值返回指定索引位置的列值,索引從0開始計數(shù)PDO::FETCH_CLASS將結果集中的數(shù)據(jù)映射為指定類的對象返回一個指定類的對象,其中的屬性會被賦值為結果集中對應的列值PDO::FETCH_FUNC使用自定義的回調(diào)函數(shù)處理結果集中的每一行數(shù)據(jù)返回回調(diào)函數(shù)處理后的結果修改pdo02.php,使用fetchAll()方法以關聯(lián)數(shù)組形式獲取結果集:$data=$res->fetchAll(PDO::FETCH_ASSOC);print_r($data);9.1.4處理結果集輸出結果:Array([0]=>Array([id]=>1[name]=>Allen)[1]=>Array([id]=>2[name]=>James))多學一招:將變量綁定到結果集中的某一列將變量綁定到結果集中的某一列fetch()方法的參數(shù)設置為PDO::FETCH_BOUND時,執(zhí)行成功后會分配結果集中的列值給bindColumn()方法綁定的變量。將變量綁定到結果集中的某一列的示例代碼:$res->bindColumn('id',$id);

//將變量$id綁定到結果集$res的id列$res->bindColumn('name',$name); //將變量$name綁定到結果集$res的name列while($res->fetch(PDO::FETCH_BOUND)){ //獲取綁定到變量中的數(shù)據(jù)

echo$id.'-'.$name.'<br>';}

先定一個小目標!掌握預處理機制的使用,能夠使用指定方法創(chuàng)建預處理SQL語句和綁定數(shù)據(jù)。9.1.5預處理機制在PHP程序中編寫SQL語句時,如果將發(fā)送的數(shù)據(jù)和SQL語句寫在一起,每條SQL語句都需要解析器進行分析、編譯和優(yōu)化,效率低。預處理機制是先定義和發(fā)送模板形式的SQL語句,用占位符替代實際數(shù)據(jù),稱為預處理SQL語句,解析器會預先編譯預處理SQL語句,再處理相關數(shù)據(jù)。使用預處理機制可以避免數(shù)據(jù)中有特殊字符(如單引號)而導致的語法問題出現(xiàn),提高程序運行效率。下面講解預處理機制中的預處理方法和數(shù)據(jù)綁定。9.1.5預處理機制1.預處理方法通過PDO中的預處理方法prepare()和execute()可以實現(xiàn)預處理機制。prepare()方法用于準備預處理SQL語句,execute()方法用以執(zhí)行預處理語句。prepare()方法語法格式PDOStatementPDO::prepare(string$query,array$options=array())9.1.5預處理機制execute()方法語法格式PDOStatement::execute($input_parameters)$query是預處理SQL語句,該語句中動態(tài)變化的量用占位符代替,占位符使用問號占位符“?”和參數(shù)占位符“:參數(shù)名稱”;

$options是可選參數(shù),設置一個或多個PDOStatement對象的屬性值$input_parameters是可選參數(shù),表示為預處理SQL語句中的占位符綁定數(shù)據(jù),如果預處理SQL語句不包含占位符,可省略此參數(shù)。演示如何使用預處理方法:9.1.5預處理機制<?php$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');$sql='SELECT*FROM`student`';$stmt=$pdo->prepare($sql);var_dump($stmt->execute()); //輸出結果:bool(true)2.數(shù)據(jù)綁定預處理SQL語句中有占位符時,使用execute()方法、bindParam()方法和bindValue()方法為占位符綁定數(shù)據(jù)。bindParam()方法和bindValue()方法的區(qū)別:bindParam()方法將占位符綁定到指定的變量名上,使用execute()方法執(zhí)行預處理SQL語句時,只需要修改變量名的值。bindValue()方法將值綁定到占位符上,使用execute()方法執(zhí)行預處理SQL語句時,每修改一次值,都需要重復執(zhí)行一次bindValue()方法和execute()方法。9.1.5預處理機制(1)execute()方法execute()方法的參數(shù)$input_parameters是一個數(shù)組,該數(shù)組的元素個數(shù)必須與預處理SQL語句中的占位符數(shù)量相同。當占位符是問號占位符時,$input_parameters必須是一個索引數(shù)組;當占位符是參數(shù)占位符時,$input_parameters必須是一個關聯(lián)數(shù)組。使用execute()方法為問號占位符綁定數(shù)據(jù):<?php$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');$sql='INSERTINTO`student`(`name`,`mobile`)VALUES(?,?)';$stmt=$pdo->prepare($sql);$stmt->execute(['Charles','1111']);$stmt->execute(['Andy','2222']);$stmt->execute(['Bruce','3333']);9.1.5預處理機制使用execute()方法為參數(shù)占位符綁定數(shù)據(jù):$sql='INSERTINTO`student`(`name`,`mobile`)VALUES'.'(:name,:mobile)';$stmt=$pdo->prepare($sql);$stmt->execute([':name'=>'Charles',':mobile'=>'1111']);$stmt->execute([':name'=>'Andy',':mobile'=>'2222']);$stmt->execute(['name'=>'Bruce','mobile'=>'3333']);9.1.5預處理機制為參數(shù)占位符綁定數(shù)據(jù)可以使用“:參數(shù)名”或“參數(shù)名”的形式(2)bindParam()方法使用bindParam()方法為問號占位符綁定數(shù)據(jù)時,bindParam()方法的第1個參數(shù)是一個以1開始的數(shù)字,表示對應預處理中的第幾個問號占位符,使用bindParam()方法為參數(shù)占位符綁定數(shù)據(jù)時,bindParam()方法的第1個參數(shù)是“:參數(shù)名”或“參數(shù)名”的形式。使用bindParam()方法為問號占位符和參數(shù)占位符綁定數(shù)據(jù)://綁定問號占位符$stmt->bindParam(1,$name);$stmt->bindParam(2,$entry_date);//綁定參數(shù)占位符$stmt->bindParam(':參數(shù)名',$name);$stmt->bindParam('參數(shù)名',$entry_date);//省略“:”9.1.5預處理機制將占位符綁定指定的變量后,即可進行變量的賦值和預處理SQL語句的執(zhí)行:list($name,$entry_date)=['Charles','2019-1-1'];$stmt->execute();list($name,$entry_date)=['Andy','2019-1-1'];$stmt->execute();9.1.5預處理機制(3)bindValue()方法bindValue()方法和bindParam()方法的第1個參數(shù)的使用方法相同,bindValue()方法的第2個參數(shù)用于傳入一個值,它無須進行變量的綁定,使用較為方便。使用bindValue()方法為問號占位符和參數(shù)占位符綁定數(shù)據(jù)://綁定問號占位符$stmt->bindValue(1,'Charles');$stmt->bindValue(2,'2019-1-1');$stmt->execute();//綁定參數(shù)占位符$stmt->bindValue(':參數(shù)名','Charles');$stmt->bindValue('參數(shù)名','2019-1-1');//省略“:”$stmt->execute();9.1.5預處理機制

先定一個小目標!掌握PDO錯誤處理,能夠使用不同的錯誤處理模式進行錯誤處理。9.1.6PDO錯誤處理在使用SQL語句操作數(shù)據(jù)庫時,難免會出現(xiàn)各種各樣的錯誤,如語法錯誤、邏輯錯誤等。為了避免SQL語句出現(xiàn)這些錯誤,我們既可以利用前面學習過的異常處理方式手動捕獲PDOException類異常,也可以使用PDO提供的錯誤處理模式進行錯誤處理。9.1.6PDO錯誤處理PDO提供了3種錯誤處理模式:①PDO::ERRMODE_SILENT:此模式表示在發(fā)生錯誤時不進行任何操作,只簡單地設置錯誤代碼。通過PDO類的errorCode()方法和errorInfo()方法獲取最后一次操作的錯誤碼和錯誤信息。②PDO::ERRMODE_WARNING:此模式表示在發(fā)生錯誤時,將錯誤作為警告拋出,不中斷程序的運行。③PDO::ERRMODE_EXCEPTION:此模式是默認的錯誤處理模式,它表示在錯誤發(fā)生時拋出相關異常。此模式在項目調(diào)試當中較為實用,可以快速地找到存在問題的代碼。9.1.6PDO錯誤處理setAttribute()方法用于設置PDO的屬性,在程序中使用該方法設置錯誤處理模式。語法格式PDO::setAttribute(PDO::ATTR_ERRMODE,$value);PDO::ATTR_ERRMODE表示設置錯誤處理模式,$value表示設為哪種錯誤處理模式,如PDO::ERRMODE_WARNING。9.1.6PDO錯誤處理演示如何設置WARNING錯誤處理模式:<?php$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');//設置錯誤模式$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_WARNING);//預處理SQL語句$stmt=$pdo->prepare('SELECT*FROM`test`');//執(zhí)行預處理SQL語句,若execute()方法返回false表示執(zhí)行失敗if(false===$stmt->execute()){echo'錯誤碼:'.$stmt->errorCode().'<br>'; //輸出錯誤碼

print_r($stmt->errorInfo()); //輸出錯誤信息}9.1.6PDO錯誤處理上述代碼運行結果:9.1.6PDO錯誤處理多學一招:PDO屬性的獲取PDO屬性的獲取使用PDO類提供的getAttribute()方法可以獲取PDO連接的特定屬性的值,用于查詢和檢索與數(shù)據(jù)庫連接相關的各種屬性。getAttribute()方法的語法格式:PDO::getAttribute($attribute);$attribute用于指定要獲取的屬性的常量值多學一招:PDO屬性的獲取PDO屬性的獲取getAttribute()方法中的常量值是PDO::ATTR_*系列常量中的一個,$attribute的可選值如下:PDO::ATTR_AUTOCOMMIT:連接的自動提交模式。PDO::ATTR_CASE:列名在結果集中的大小寫方式。PDO::ATTR_CLIENT_VERSION:客戶端庫版本。PDO::ATTR_CONNECTION_STATUS:連接狀態(tài)。PDO::ATTR_DRIVER_NAME:驅動程序名稱。PDO::ATTR_SERVER_INFO:服務器信息。PDO::ATTR_SERVER_VERSION:數(shù)據(jù)庫服務器版本。多學一招:PDO屬性的獲取PDO屬性的獲取演示使用getAttribute()方法獲取PDO連接的特定屬性的值:$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');$driver_name=$pdo->getAttribute(PDO::ATTR_DRIVER_NAME);echo'驅動程序名稱是'.$driver_name; //輸出結果:驅動程序名稱是mysql$server_version=$pdo->getAttribute(PDO::ATTR_SERVER_VERSION);echo'服務器的版本是'.$server_version; //輸出結果:服務器的版本是8.0.32

先定一個小目標!掌握PDO事務處理,能夠使用PDO類的事務處理的相關方法實現(xiàn)事務。9.1.7PDO事務處理PDO類提供了事務處理的相關方法:9.1.7PDO事務處理方法名說明PDO::beginTransaction()啟動事務PDO::commit()提交事務PDO::inTransaction()檢查是否在事務內(nèi)PDO::rollBack()回滾事務演示如何進行事務處理:9.1.7PDO事務處理<?php$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);$pdo->beginTransaction(); //開啟事務try{$stmt=$pdo->prepare('INSERTINTO`student`(`name`)VALUES(?)');

//執(zhí)行插入操作

$stmt->execute(['小明']);$pdo->commit(); //提交事務}catch(PDOException$e){

$pdo->rollBack(); //回滾事務echo'執(zhí)行失?。?.$e->getMessage();}在自定義框架中封裝數(shù)據(jù)庫操作類9.2

先定一個小目標!掌握封裝DB類的方法,能夠在自定義框架中封裝DB類。9.2.1【案例】封裝DB類在自定義框架中,DB類負責數(shù)據(jù)庫操作,主要包括連接數(shù)據(jù)庫、執(zhí)行SQL語句、處理結果集等。SQL語句分為查詢類和執(zhí)行類。查詢類是指SELECT語句這種有結果集的操作,執(zhí)行類是指INSERT語句、UPDATE語句、DELETE語句等沒有結果集的操作。本案例需要在DB類中封裝實現(xiàn)查詢類的操作和執(zhí)行類的操作。

案例需求9.2.1【案例】封裝DB類①在C:\web\www\myframe\myframe目錄下創(chuàng)建DB.php文件,創(chuàng)建DB類,在DB類中創(chuàng)建getInstance()和init()兩個靜態(tài)方法,getInstance()方法用于連接數(shù)據(jù)庫,init()方法用于傳入連接配置。②在config目錄下創(chuàng)建database.php文件,保存數(shù)據(jù)庫連接配置,在框架中加載配置。③在DB類中封裝查詢類操作,創(chuàng)建fetchRow()和fetchAll()方法,實現(xiàn)查詢一條數(shù)據(jù)和查詢多條數(shù)據(jù)。④在DB類中封裝執(zhí)行類操作,創(chuàng)建execute()方法實現(xiàn)執(zhí)行類操作,創(chuàng)建lastInsertId()方法獲取自動增長字段最后插入的id值。

實現(xiàn)思路9.2.1【案例】封裝DB類

先定一個小目標!掌握封裝Model類的方法,能夠在自定義框架中封裝Model類。9.2.2【案例】封裝Model類在自定義框架中,Model類負責對數(shù)據(jù)表進行增、刪、改、查等操作,每個Model類對應一張數(shù)據(jù)表。Model類使用數(shù)據(jù)表名稱來命名,在Model類中根據(jù)類名自動識別表名,能夠根據(jù)條件查詢數(shù)據(jù),對數(shù)據(jù)排序和限量。

案例需求9.2.2【案例】封裝Model類①在myframe目錄下創(chuàng)建Model.php文件,實現(xiàn)初始化表名功能。②創(chuàng)建查詢數(shù)據(jù)方法,用于執(zhí)行SELECT語句,具體方法說明如下。get()方法:查詢多條記錄,其參數(shù)為字段數(shù)組,如果省略參數(shù)表示所有字段。first()方法:查詢一條記錄,其參數(shù)為字段數(shù)組,如果省略參數(shù)表示所有字段。value()方法:查詢單個字段,其參數(shù)為字段名。③創(chuàng)建where()方法和orWhere()方法,實現(xiàn)條件查詢。

實現(xiàn)思路9.2.2【案例】封裝Model類④創(chuàng)建orderBy()方法和limit()方法,分別實現(xiàn)排序和限量。⑤創(chuàng)建insert()方法和insertGetId()方法實現(xiàn)新增數(shù)據(jù),insert()方法返回的結果是新增的記錄數(shù),insertGetId()方法返回的結果是最后插入的id值。⑥創(chuàng)建update()方法實現(xiàn)修改數(shù)據(jù),返回的結果是受影響的行數(shù)。⑦創(chuàng)建delete()方法實現(xiàn)刪除數(shù)據(jù),返回的結果是被刪除的數(shù)據(jù)條數(shù)。

實現(xiàn)思路9.2.2【案例】封裝Model類Smarty模板引擎9.3

先定一個小目標!掌握Smarty的安裝,能夠獨立安裝Smarty。9.3.1安裝SmartySmarty是使用PHP語言開發(fā)的模板引擎,具有響應速度快、語句自由、支持插件擴展等特點。Smarty實現(xiàn)了PHP代碼與HTML代碼的分離,使PHP開發(fā)人員專注于數(shù)據(jù)的處理及功能模塊的實現(xiàn),網(wǎng)頁設計人員專注于網(wǎng)頁的設計與排版工作。9.3.1安裝Smarty使用Composer可以安裝Smarty模板引擎。在命令提示符窗口中,切換到C:\web\www\myframe目錄,執(zhí)行安裝Smarty模板引擎的命令:composerrequiresmarty/smarty=~4.39.3.1安裝Smarty執(zhí)行安裝命令后,打開composer.json,會看到該文件自動添加了Smarty的相關配置:"require":{"smarty/smarty":"^4.3"}安裝Smarty后,打開vendor目錄,會看到里面新增了smarty目錄,Smarty的核心文件在vendor\smarty\smarty\libs目錄下,該目錄中的文件和目錄介紹如下:9.3.1安裝Smarty名稱說明Autoloader.phpSmarty中實現(xiàn)自動載入文件功能的類bootstrap.php實現(xiàn)自動加載Smartydebug.tplSmarty中的提示信息模板文件functions.php輔助函數(shù)文件Smarty.class.phpSmarty核心類文件,提供相關方法用于實現(xiàn)Smarty模板引擎的功能plugins自定義插件目錄,存放各類自定義插件的目錄sysplugins存放系統(tǒng)文件目錄

先定一個小目標!掌握Smarty的基本使用,能夠使用Smarty的語法在模板展示數(shù)據(jù)。9.3.2Smarty的基本使用Smarty的常用語法:語法說明if指令條件判斷foreach指令循環(huán)展示數(shù)據(jù)include指令引用其他模板文件9.3.2Smarty的基本使用Smarty的常用方法:方法說明assign()向模板頁面分配變量display()展示模板fetch()將模板轉化為字符串block()定義一個區(qū)域塊演示使用Smarty查詢student數(shù)據(jù)表的數(shù)據(jù),smarty.php文件的示例代碼如下:<?phprequire_once('C:/web/www/myframe/vendor/smarty/smarty/libs/Smarty.class.php');$dsn='mysql:host=localhost;port=3306;dbname=myframe;charset=utf8mb4';$pdo=newPDO($dsn,'root','123456');$res=$pdo->query('SELECT*FROM`student`');$data=[];while($row=$res->fetch(PDO::FETCH_ASSOC)){$data[]=['id'=>$row['id'],'name'=>$row['name']];}$smarty=newSmarty();$smarty->assign('data',$data);$smarty->display('student.html');9.3.2Smarty的基本使用student.html文件的示例代碼如下:<body><tableborder="1"><tr><th>id</th><th>name</th></tr>

{foreach$dataas$v}<tr><td>{$v.id}</td><td>{$}</td></tr>

{/foreach}</table></body>9.3.2Smarty的基本使用

先定一個小目標!掌握Smarty的基本使用,能夠在自定義框架中使用Smarty。9.3.3【案例】在自定義框架中使用Smarty在自定義框架中使用Smarty時,需要配置模板文件目錄和編譯文件目錄。其中,模板文件是指使用Smarty語法編寫的HTML模板文件,編譯文件是指Smarty模板引擎將模板文件編譯成的PHP腳本文件。為了使所有的控制器都能使用Smarty,需要創(chuàng)建基礎控制器類,將Smarty的初始化代碼寫在基礎控制器的構造方法中,其他控制器繼承這個基礎控制器類。

案例需求9.3.3【案例】在自定義框架中使用Smarty①在C:\web\www\myframe\myframe目錄下創(chuàng)建Controller.php文件,用于實現(xiàn)基礎控制器類,在基礎控制器類中創(chuàng)建getRootPath()方法,獲取項目的根路徑,配置模板引擎的視圖文件路徑和編譯文件路徑。②在Controller.php中封裝assign()方法和fetch()方法。③在StudentController中創(chuàng)建test()方法和模板文件resources\views\test.html,測試是否可以顯示頁面和數(shù)據(jù)。④讀取student數(shù)據(jù)表中的數(shù)據(jù),輸出學生信息,如果學生的性別是男,將學生名稱顯示為紅色。

實現(xiàn)思路9.3.3【案例】在自定義框架中使用Smarty本章小結本章講解了PDO擴展、在自定義框架中封裝數(shù)據(jù)庫操作類以及Smarty模板引擎的使用方法。通過本章的學習,讀者應能夠使用PDO擴展操作數(shù)據(jù)庫,能夠在框架中按需求封裝數(shù)據(jù)庫操作類,能夠使用Smarty模板引擎實現(xiàn)視圖與業(yè)務邏輯代碼的分離。本章小結第10章項目實戰(zhàn)——內(nèi)容管理系統(tǒng)《PHP網(wǎng)站開發(fā)實例教程(第3版)》學習目標/Target

熟悉內(nèi)容管理系統(tǒng)的頁面效果,能夠說出內(nèi)容管理系統(tǒng)的主要功能。

掌握內(nèi)容管理系統(tǒng)后臺功能的實現(xiàn),能夠根據(jù)實現(xiàn)步驟實現(xiàn)后臺的相關功能。

掌握內(nèi)容管理系統(tǒng)前臺功能的實現(xiàn),能夠根據(jù)實現(xiàn)步驟實現(xiàn)前臺的相關功能。章節(jié)概述/SummaryPHP可以開發(fā)各種不同類型的項目,內(nèi)容管理系統(tǒng)(ContentManagementSystem,CMS)就是一種比較典型的項目。常見的門戶、新聞、博客、文章等類型的網(wǎng)站都可以利用CMS進行搭建。CMS用于對信息進行分類管理,將信息有序、及時地呈現(xiàn)在用戶面前,滿足人們發(fā)布信息、獲取信息的需求,保證信息的共享更加快捷和方便。本章將講解如何基于自定義框架開發(fā)內(nèi)容管理系統(tǒng)。目錄/Contents10.110.2項目展示內(nèi)容管理系統(tǒng)的功能實現(xiàn)項目展示10.1

先定一個小目標!熟悉內(nèi)容管理系統(tǒng)的頁面效果,能夠說出內(nèi)容管理系統(tǒng)的主要功能。10.1項目展示內(nèi)容管理系統(tǒng)的前臺首頁:10.1項目展示內(nèi)容管理系統(tǒng)的后臺登錄頁面:10.1項目展示內(nèi)容管理系統(tǒng)的后臺首頁:10.1項目展示內(nèi)容管理系統(tǒng)的功能實現(xiàn)10.2

先定一個小目標!掌握后臺功能的實現(xiàn),能夠根據(jù)步驟實現(xiàn)功能。10.2.1后臺功能實現(xiàn)后臺功能后臺用戶登錄頁面搭建驗證碼10.2.1后臺功能實現(xiàn)欄目管理文章管理1.后臺用戶登錄后臺用戶登錄通常是系統(tǒng)的管理員登錄,登錄后對系統(tǒng)進行維護。后臺用戶登錄功能的實現(xiàn)步驟:10.2.1后臺功能實現(xiàn)登錄MySQL,在myframe數(shù)據(jù)庫中創(chuàng)建用戶表,向表中插入一條數(shù)據(jù)。1在C:\web\www\myframe下創(chuàng)建app\Http\Controllers\admin目錄,實現(xiàn)后臺功能。2創(chuàng)建LoginController處理登錄相關業(yè)務,與登錄相關的方法如下。index()方法:顯示登錄頁面,提示用戶輸入用戶名、密碼和驗證碼。login()方法:接收登錄表單,返回登錄成功或登錄失敗的提示。logout()方法:退出登錄。captcha()方法:顯示驗證碼。3后臺用戶登錄功能的實現(xiàn)步驟:10.2.1后臺功能實現(xiàn)創(chuàng)建myframe\HttpException.php文件,在App.php的run()方法中捕獲HttpException,在myframe\Controller.php編寫success()方法和error()方法,實現(xiàn)Ajax交互。4創(chuàng)建app\User.php模型文件,在login()方法中驗證用戶名和密碼。5用戶登錄成功后,通過Session來記住登錄狀態(tài),并在下次請求中判斷用戶是否登錄。6在logout()方法中清除用戶的Session信息,實現(xiàn)退出登錄。72.驗證碼考慮到網(wǎng)站上線后可能會遭受攻擊,為了保護后臺登錄功能的安全,需要增加一個驗證碼功能,用戶登錄時顯示一張驗證碼圖片,要求用戶輸入圖片中的字符,只有驗證碼輸入正確,后臺才會處理用戶的登錄請求。驗證碼功能的實現(xiàn)步驟如下:10.2.1后臺功能實現(xiàn)在myframe\Captcha.php中創(chuàng)建驗證碼類,create()方法自動生成驗證碼字符,show()方法生成驗證碼圖像。1在控制器中使用驗證碼類,生成驗證碼圖像。2判斷用戶輸入的驗證碼是否正確,驗證碼驗證成功后,該驗證碼會立即過期,不允許被重復驗證。33.頁面搭建用戶登錄成功以后,就會進入后臺首頁。后臺頁面結構主要分為3部分,分別是頂部、菜單和內(nèi)容區(qū)域。后臺頁面:10.2.1后臺功能實現(xiàn)頂部菜單內(nèi)容區(qū)域后臺頁面搭建的實現(xiàn)步驟:10.2.1后臺功能實現(xiàn)創(chuàng)建resources\views\admin\layout.html文件實現(xiàn)后臺頁面布局。1在Request.php文件中添加isAjax()方法,用于判斷當前請求是否為Ajax請求,在CommonController中調(diào)用isAjax()方法,判斷如果不是Ajax請求就返回布局視圖。2在layout.html的菜單位置添加“首頁”“欄目管理”“文章管理”菜單項。3修改IndexController的index()方法,顯示后臺首頁對應的admin/index模板,將系統(tǒng)環(huán)境、MySQL版本、文件上傳限制、腳本執(zhí)行時限以及服務器時間等信息輸出到頁面中。44.欄目管理欄目用于對內(nèi)容進行分類,如生活類、咨訊類、編程類等,用戶可以更高效地找到需要的信息。欄目管理的功能主要包括欄目的查詢、添加、修改和刪除。欄目管理的實現(xiàn)步驟:10.2.1后臺功能實現(xiàn)創(chuàng)建欄目表cms_category,字段為id、name(欄目名稱)和sort(排序),添加測試數(shù)據(jù)。1創(chuàng)建欄目表對應的模型文件app\Category.php,在該文件中完成對欄目表的操作。2創(chuàng)建app\Http\Controllers\Admin\CategoryController.php,創(chuàng)建index()方法讀取欄目列表。3在CategoryController中編寫edit()方法,實現(xiàn)修改欄目。4在CategoryController中編寫delete()方法,實現(xiàn)刪除欄目。55.文章管理文章管理功能需要支持上傳文件。用戶可以上傳封面圖,由于文章記錄會越來越多,需要提供分頁查詢,方便用戶瀏覽。文章管理的實現(xiàn)步驟:10.2.1后臺功能實現(xiàn)創(chuàng)建文章表cms_article,字段為文章id、所屬欄目id、文章標題、作者名、封面圖路徑、發(fā)布狀態(tài)、閱讀量、文章內(nèi)容以及創(chuàng)建時間,向文章表中添加測試數(shù)據(jù)。1創(chuàng)建文章表對應的模型文件app\Article.php,在該文件中完成對文章表的操作。2創(chuàng)建app\Http\Controllers\Admin\ArticleController.php,創(chuàng)建index()方法,讀取文章列表。3創(chuàng)建myframe\Page.php,實現(xiàn)分頁查詢,生成分頁的導航鏈接。4文章管理的實現(xiàn)步驟:10.2.1后臺功能實現(xiàn)在ArticleController中創(chuàng)建edit()方法,顯示添加或修改文章頁面,引入在線編輯器Ueditor,添加save()方法保存修改后的文章。5在myframe\Request.php中創(chuàng)建hasFile()方法,判斷當前文章是否有文件上傳,創(chuàng)建file()方法獲取文件信息,創(chuàng)建myframe\Upload.php文件實現(xiàn)文件上傳。6在ArticleController中創(chuàng)建delete()方法,根據(jù)文章id刪除指定文章。7文章的欄目id依賴欄目表的記錄,當刪除欄目時,該欄目下原有的文章的所屬分類就會出現(xiàn)問題,修改CategoryController,將被刪除的欄目下的所有文章的欄目id設為0,表示未選擇欄目。8

先定一個小目標!掌握前臺功能的實現(xiàn),能夠根據(jù)步驟實現(xiàn)功能。10.2.2前臺功能實現(xiàn)前臺功能前臺首頁文章展示10.2.2前臺功能實現(xiàn)供外部訪客訪問,主要展示網(wǎng)站的內(nèi)容。展示文章的詳細信息。10.2.2前臺功能實現(xiàn)1.前臺首頁前臺首頁的頁面布局分為頂部、內(nèi)容區(qū)域和尾部3部分。頂部包含欄目導航,用戶單擊欄目導航鏈接可以切換當前顯示的欄目。內(nèi)容區(qū)域包含內(nèi)容:輪播圖:輪播圖突出展示網(wǎng)站的熱點內(nèi)容,通過直接編寫HTML代碼實現(xiàn)輪播圖。文章列表:首頁顯示所有欄目的文章,如果在某個欄目下,顯示某個欄目的文章。側邊欄:位于文章列表的右側,側邊欄中會顯示熱門標簽、最新文章和最熱文章3個模塊。其中,熱門標簽功能在后臺沒有開發(fā),直接編寫HTML代碼展示,最新文章和最熱文章需要查詢文章表獲取數(shù)據(jù)。10.2.2前臺功能實現(xiàn)前臺首頁功能的實現(xiàn)步驟:創(chuàng)建resources\views\layout.html實現(xiàn)前臺頁面的布局,創(chuàng)建index.html保存首頁的內(nèi)容區(qū)域。1實現(xiàn)首頁的頂部內(nèi)容,創(chuàng)建IndexController.php,通過index()方法顯示前臺首頁,編寫category()方法查詢欄目記錄。在layout.html輸出欄目列表,給選中的欄目添加選中樣式。2實現(xiàn)內(nèi)容區(qū)域輪播圖,在resources\views下創(chuàng)建sub目錄,將輪播圖代碼保存到slide.html中。3實現(xiàn)內(nèi)容區(qū)域的文章列表,修改IndexController的index()方法,讀取文章列表并實現(xiàn)分頁查詢,創(chuàng)建resources\views\sub\list.html文件,輸出文章列表。4實現(xiàn)內(nèi)容區(qū)域的側邊欄,在IndexController中創(chuàng)建sidebar(),其他頁面使用時直接調(diào)用,創(chuàng)建resources\views\sub\sidebar.html,輸出熱門標簽、熱門文章和最新文章,在index.html中引入側邊欄。510.2.2前臺功能實現(xiàn)2.文章展示用戶單擊某一篇文章后,會進入文章展示頁面,文章展示頁面會顯示文章的標題、內(nèi)容、作者、發(fā)表時間、閱讀量,并且為了方便用戶瀏覽,還會提供上一篇、下一篇切換的鏈接。文章展示頁面的實現(xiàn)步驟:在IndexController中編寫show()方法,該方法的參數(shù)id表示要展示的文章的id,根據(jù)id查詢文章的詳細信息和所屬的分類名稱。1創(chuàng)建resources\views\show.html文件,顯示文章的詳細信息。2本章小結本章首先展示了內(nèi)容管理系統(tǒng)的相關功能,然后對內(nèi)容管理系統(tǒng)中的后臺和前臺的功能實現(xiàn)進行了分析,并給出了每個功能的實現(xiàn)步驟,讀者可以根據(jù)這些步驟實現(xiàn)指定的功能。如果在實現(xiàn)功能的過程中遇到問題,可參考開發(fā)文檔進行代碼的調(diào)試和修改,最終完成內(nèi)容管理系統(tǒng)。本章小結第11章Laravel框架《PHP網(wǎng)站開發(fā)實例教程(第3版)》學習目標/Target

了解Laravel框架,能夠說出Laravel框架的特點。

掌握Laravel框架的創(chuàng)建,能夠創(chuàng)建Laravel項目。

了解VSCode編輯器的配置,能夠說出配置文件中各個配置項的作用。

了解Laravel框架的目錄結構,能夠說出各個目錄的作用。學習目標/Target

掌握Laravel框架中路由的使用方法,能夠配置路由、設置路由參數(shù)、給路由

設置別名和分組。

掌握Laravel框架中控制器的使用方法,能夠創(chuàng)建控制器、配置控制器路由和

接收用戶輸入。

掌握Laravel框架中視圖的使用方法,能夠使用視圖展示數(shù)據(jù)。

掌握Laravel框架中模型的使用方法,能夠使用模型完成數(shù)據(jù)操作。章節(jié)概述/SummaryLaravel框架自發(fā)布以來備受PHP開發(fā)人員的喜愛,其用戶數(shù)量增長速度十分快。本章將講解Laravel框架的相關內(nèi)容,主要包括Laravel框架的基礎知識、路由、控制器、視圖和模型等內(nèi)容。目錄/Contents11.111.211.3初識Laravel路由控制器11.4視圖11.5模型初識Laravel11.1

先定一個小目標!了解Laravel框架,能夠說出Laravel框架的特點。11.1.1Laravel概述11.1.1Laravel概述Laravel是一套簡潔、優(yōu)雅的Web應用框架,具有富于表達性且簡潔的語法。它提供了強大的工具用于開發(fā)大型應用,這些工具包括自動驗證、路由、Session、緩存、數(shù)據(jù)庫遷移、單元測試等。11.1.1Laravel概述為了讓框架統(tǒng)一管理所有的請求,整個項目對外只提供一個入口。單入口AR(活動記錄)模式允許在模型類中定義方法來處理數(shù)據(jù)的業(yè)務邏輯。支持AR模式利用MVC可以更好地協(xié)同開發(fā),為后期維護提供方便。MVC開發(fā)模式ORM(對象關系映射)將數(shù)據(jù)庫中的表和記錄轉換為對象和屬性,使用面向對象方式操作數(shù)據(jù)庫。ORM方式操作數(shù)據(jù)庫Laravel框架特點

先定一個小目標!掌握Laravel框架的創(chuàng)建,能夠創(chuàng)建Laravel項目。11.1.2創(chuàng)建Laravel項目本書基于Laravel10.0講解,該版本要求運行環(huán)境的PHP版本必須大于或等于8.1。創(chuàng)建Laravel項目的步驟:11.1.2創(chuàng)建Laravel項目在php.ini開啟擴展:curl、fileinfo、gd、mbstring、openssl、pdo_mysql。1在httpd.conf開啟rewrite模塊,在httpd-vhost.conf配置虛擬主機,主機名www.laravel.test。2創(chuàng)建C:\web\www\laravel目錄,在該目錄下安裝Laravel框架,安裝結果:3創(chuàng)建Laravel項目的步驟:11.1.2創(chuàng)建Laravel項目重啟Apache服務,使修改后的配置生效。4編輯hosts文件,添加域名的解析記錄。5通過瀏覽器訪問http://www.laravel.test,頁面效果:6www.laravel.testlaravel.test

先定一個小目標!了解VSCode編輯器的配置,能夠說出配置文件中每個配置項的作用。11.1.3配置VSCode編輯器配置VSCode編輯器:使用VSCode編輯器打開C:\web\www\laravel目錄。111.1.3配置VSCode編輯器配置VSCode編輯器:創(chuàng)建.vscode目錄,在該目錄創(chuàng)建settings.json文件,對代碼進行語法檢查和自動格式化。2{"php.suggest.basic":false,"php.executablePath":"C:/web/php8.2/php.exe","phpcs.standard":"psr2","files.eol":"\n"}是否啟用基本的PHP代碼建議功能指定php.exe文件的路徑指定PHP代碼風格規(guī)范指定文件行尾的結束符11.1.3配置VSCode編輯器

先定一個小目標!了解Laravel框架的目錄結構,能夠說出每個目錄的作用。11.1.4Laravel目錄結構Laravel項目的一級目錄:目錄作用app框架核心目錄,保存項目中的控制器、模型等bootstrap和框架的啟動相關的文件config存放一些配置文件database數(shù)據(jù)庫遷移文件及數(shù)據(jù)填充文件public存放入口文件index.php和前端資源文件(如CSS、JavaScript等)resources存放視圖文件、語言包和未編譯的前端資源文件routes存放框架中定義的所有路由storage存放編譯后的模板、Session文件、緩存文件、日志文件等tests自動化測試文件vendor存放通過Composer加載的依賴11.1.4Laravel目錄結構Laravel項目常用的子目錄和文件:11.1.4Laravel目錄結構類型路徑作用目錄app\Http存放與HTTP請求相關的文件目錄app\Http\Controllers存放控制器文件文件app\Http\Controllers\Controller.php控制器的基類文件目錄app\Http\Middleware中間件目錄目錄app\Models模型目錄文件app\Models\User.phpUser模型文件文件bootstrap\app.php創(chuàng)建Laravel應用實例文件config\app.php全局配置文件文件config\auth.phpAuth模塊的配置文件文件config\database.php數(shù)據(jù)庫配置文件文件config\filesystem.php文件系統(tǒng)的配置文件目錄database\factories存放工廠模式的數(shù)據(jù)填充文件1/2Laravel項目常用的子目錄和文件:11.1.4Laravel目錄結構類型路徑作用目錄database\migrations存放數(shù)據(jù)庫遷移文件目錄database\seeders存放數(shù)據(jù)填充器文件目錄resources\views存放視圖文件文件routes\web.php定義路由的文件目錄storage\app存放用戶上傳的文件目錄storage\framework存放與框架自身相關的文件目錄storage\logs存放日志文件文件public\index.php入口文件文件.env環(huán)境變量配置文件文件artisan腳手架文件文件composer.jsonComposer依賴包配置文件2/2路由11.2

先定一個小目標!掌握配置路由的語法,能夠定義不同請求方式的路由。11.2.1配置路由Laravel框架的路由在routes\web.php中配置,該文件已經(jīng)添加了一個默認路由:Route::get('/',function(){returnview('welcome');});匹配路徑為“/”,view()函數(shù)表示要顯示的視圖,參數(shù)welcome是視圖文件的名稱11.2.1配置路由定義路由的語法格式:語法格式Route::請求方式('請求URI',匿名函數(shù)或控制器相應的方法);請求方式如下:get、post、put、patch、delete、options11.2.1配置路由Route類中提供了match()和any()兩個靜態(tài)方法,match()用于在一個路由中同時匹配多個請求方式;any()用于在一個路由中匹配任意請求方式。語法格式//同時匹配get和post請求方式Route::match(['get','post'],'請求URI',匿名函數(shù)或控制器相應的方法);//匹配任意請求方式Route::any('請求URI',匿名函數(shù)或控制器相應的方法);11.2.1配置路由請求URI是一個完整URL地址中從域名后面的“/”開始的路徑,不含請求參數(shù)。下面演示完整的URL對應的請求URI:11.2.1配置路由完整URI請求URIhttp://www.laravel.test//http://www.laravel.test/hello/123/hello/123http://www.laravel.test/hello/456?a=1/hello/456定義路由時,請求URI中的/可以省略,如/hello修改為hello,運行結果不變。在路由文件中定義路由,用于匹配/hello:11.2.1配置路由Route::get('/hello',function(){return'hello'; //返回一個字符串給瀏覽器,以方便測試});瀏覽器訪問http://www.laravel.test/hello,運行結果如下:

先定一個小目標!掌握路由參數(shù)的定義,能夠定義路由時設置必選參數(shù)和可選參數(shù)。11.2.2路由參數(shù)Laravel允許在請求URI中傳遞一些動態(tài)參數(shù),稱為路由參數(shù)。通過路由參數(shù)可以傳遞請求信息,如id。11.2.2路由參數(shù)對應語法對應語法路由參數(shù)必選參數(shù)可選參數(shù)11.2.2路由參數(shù){參數(shù)名}{參數(shù)名?}演示使用必選參數(shù)和可選參數(shù)。必選參數(shù)示例代碼Route::get('find/{id}',function($id){return'輸入的id為'.$id;});11.2.2路由參數(shù)Route::get('find2/{id?}',function($id=0){

return'輸入的id為'.$id;});可選參數(shù)示例代碼

先定一個小目標!掌握路由別名的設置,能夠給路由設置別名。11.2.3路由別名路由的使用場景:<ahref="/hello/123">hello</a>視圖A視圖B視圖C11.2.3路由別名3個視圖都使用路由,當路由發(fā)生改變時,這3個視圖都需要修改,非常麻煩。11.2.3路由別名給路由/hello/123設置別名。設置路由別名后,在其他地方用到這個路由地址的時候,可以不書寫原來的地址,而是通過別名來引用這個地址。11.2.3路由別名給路由設置別名調(diào)用name()方法。語法格式Route::請求方式('請求URI',匿名函數(shù)或控制器相應的方法)->name('路由別名');11.2.3路由別名給路由/hello/123設置別名。示例代碼

Route::get('/hello/123',function(){

return'hello';

})->name('hello');在視圖中使用路由別名。示例代碼<ahref="{{route('hello')}}">hello</a>11.2.3路由別名

先定一個小目標!掌握路由分組,能夠根據(jù)需求對路由分組。11.2.4路由分組路由分組使用Route::group()來實現(xiàn):11.2.4路由分組語法格式Route::group(公共屬性數(shù)組,回調(diào)函數(shù));公共屬性數(shù)組用于指定同組路由的公共屬性,如前綴、中間件等?;卣{(diào)函數(shù)中的代碼用于定義同組路由。路由文件中有如下路由:/admin/login/admin/logout/admin/user/addRoute::group(['prefix'=>'admin'],function(){Route::get('login',function(){

溫馨提示

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

評論

0/150

提交評論