摘要:簡(jiǎn)述交互主要分為請(qǐng)求和響應(yīng)兩種方式。狀態(tài)碼構(gòu)建響應(yīng)時(shí),最先應(yīng)做的是標(biāo)識(shí)請(qǐng)求是否成功處理的狀態(tài),可通過(guò)設(shè)置屬性,該屬性使用一個(gè)有效的狀態(tài)碼。
簡(jiǎn)述
HTTP交互主要分為 request(請(qǐng)求) 和 response(響應(yīng)) 兩種方式。
對(duì)于Yii2來(lái)說(shuō),HTTP的request請(qǐng)求是用 YII::$app->request 來(lái)表示的對(duì)象,這是Yii提供的處理HTTP的request請(qǐng)求的插件,里面有很多實(shí)用的功能代碼:
request; if ($request->isGet) { echo $request->get("id", "get獲取的值為空"); } else if ($request->isPost) { $request->post("name", "post傳遞的值為空"); } echo $request->userIp; // 獲取當(dāng)前IP地址 ?>
對(duì)于Yii2來(lái)說(shuō),HTTP的response請(qǐng)求是用 YII::$app->response 來(lái)表示的對(duì)象,這是Yii提供的處理HTTP的response請(qǐng)求的插件,里面與很多實(shí)用的功能代碼:
response; // 設(shè)置服務(wù)器返回的狀態(tài)碼設(shè)置 $response->statusCode = "404"; // 設(shè)置pragma的設(shè)置,提醒瀏覽器不設(shè)置緩存 $response->headers->add("pragma", "no-chche"); // 設(shè)置pragma的設(shè)置,提醒瀏覽器設(shè)置緩存5秒 $response->headers->set("pragma", "max-age=5"); $response->headers->remove("pragma"); // 設(shè)置頁(yè)面跳轉(zhuǎn)到指定路徑 $response->headers->add("location", "https://rongx.github.io"); // 設(shè)置頁(yè)面跳轉(zhuǎn),狀態(tài)碼設(shè)置為302(調(diào)用Controller里面的方法) $this->redirect("https://rongx.github.io", 302); // 設(shè)置文件下載鏈接 $response->headers->add("content-dispostion", "attachment; filename="a.jpg""); // 提供文件下載,文件路徑實(shí)相對(duì)與入口文件來(lái)說(shuō)的 $response->sendFile("./b.jpg"); ?>
其實(shí)在 yiiwebController 里面也有很多處理HTTP的小插件功能代碼。
請(qǐng)求參數(shù)(request)要獲取請(qǐng)求參數(shù),你可以調(diào)用 request 組件的 yiiwebRequest::get() 方法和 yiiwebRequest::post() 方法。他們分別返回 $_GET 和$_POST 的值。
$request = Yii::$app->request; $get = $request->get(); // 等價(jià)于: $get = $_GET; $id = $request->get("id"); // 等價(jià)于: $id = isset($_GET["id"]) ? $_GET["id"] : null; $id = $request->get("id", 1); // 等價(jià)于: $id = isset($_GET["id"]) ? $_GET["id"] : 1; $post = $request->post(); // 等價(jià)于: $post = $_POST; $name = $request->post("name"); // 等價(jià)于: $name = isset($_POST["name"]) ? $_POST["name"] : null; $name = $request->post("name", ""); // 等價(jià)于: $name = isset($_POST["name"]) ? $_POST["name"] : "";
信息:建議你像上面那樣通過(guò) request 組件來(lái)獲取請(qǐng)求參數(shù),而不是 直接訪問 $_GET 和 $_POST。
信息:這使你更容易編寫測(cè)試用例,因?yàn)槟憧梢詡卧鞌?shù)據(jù)來(lái)創(chuàng)建一個(gè)模擬請(qǐng)求組件。
當(dāng)實(shí)現(xiàn) RESTful APIs 接口的時(shí)候,你經(jīng)常需要獲取通過(guò)PUT, PATCH或者其他的 request methods 請(qǐng)求方法提交上來(lái)的參數(shù)。
你可以通過(guò)調(diào)用 yiiwebRequest::getBodyParam() 方法來(lái)獲取這些參數(shù)。例如:
$request = Yii::$app->request; // 返回所有參數(shù) $params = $request->bodyParams; // 返回參數(shù) "id" $param = $request->getBodyParam("id");
信息:不同于 GET 參數(shù),POST,PUT,PATCH 等等這些提交上來(lái)的參數(shù)是在請(qǐng)求體中被發(fā)送的。
信息:當(dāng)你通過(guò)上面介紹的方法訪問這些參數(shù)的時(shí)候,request 組件會(huì)解析這些參數(shù)。
信息:你可以通過(guò)配置 yiiwebRequest::parsers 屬性來(lái)自定義怎樣解析這些參數(shù)。
請(qǐng)求方法(request)你可以通過(guò) request 表達(dá)式來(lái)獲取當(dāng)前請(qǐng)求使用的HTTP方法。
這里還提供了一整套布爾屬性用于檢測(cè)當(dāng)前請(qǐng)求是某種類型。例如:
$request = Yii::$app->request; if ($request->isAjax) { /* 該請(qǐng)求是一個(gè) AJAX 請(qǐng)求 */ } if ($request->isGet) { /* 請(qǐng)求方法是 GET */ } if ($request->isPost) { /* 請(qǐng)求方法是 POST */ } if ($request->isPut) { /* 請(qǐng)求方法是 PUT */ }請(qǐng)求URLs(request)
request 組件提供了許多方式來(lái)檢測(cè)當(dāng)前請(qǐng)求的URL。
假設(shè)被請(qǐng)求的URL是 http://example.com/admin/index.php/product?id=100, 你可以像下面描述的那樣獲取URL的各個(gè)部分:
yiiwebRequest::url:返回 /admin/index.php/product?id=100, 此URL不包括host info部分。
yiiwebRequest::absoluteUrl:返回 http://example.com/admin/index.php/product?id=100, 包含host infode的整個(gè)URL。
yiiwebRequest::hostInfo:返回 http://example.com, 只有host info部分。
yiiwebRequest::pathInfo:返回 /product, 這個(gè)是入口腳本之后,問號(hào)之前(查詢字符串)的部分。
yiiwebRequest::queryString:返回 id=100,問號(hào)之后的部分。
yiiwebRequest::baseUrl:返回 /admin, host info之后, 入口腳本之前的部分。
yiiwebRequest::scriptUrl:返回 /admin/index.php, 沒有path info和查詢字符串部分。
yiiwebRequest::serverName:返回 example.com, URL中的host name。
yiiwebRequest::serverPort:返回 80, 這是web服務(wù)中使用的端口。
HTTP頭(request)你可以通過(guò) yiiwebRequest::headers 屬性返回的 yiiwebHeaderCollection 獲取HTTP頭信息。 例如:
// $headers 是一個(gè) yiiwebHeaderCollection 對(duì)象 $headers = Yii::$app->request->headers; // 返回 Accept header 值 $accept = $headers->get("Accept"); if ($headers->has("User-Agent")) { /* 這是一個(gè) User-Agent 頭 */ }
請(qǐng)求組件也提供了支持快速訪問常用頭的方法,包括:
yiiwebRequest::userAgent:返回 User-Agent 頭。
yiiwebRequest::contentType:返回 Content-Type 頭的值, Content-Type 是請(qǐng)求體中MIME類型數(shù)據(jù)。
yiiwebRequest::acceptableContentTypes:返回用戶可接受的內(nèi)容MIME類型。 返回的類型是按照他們的質(zhì)量得分來(lái)排序的。得分最高的類型將被最先返回。
yiiwebRequest::acceptableLanguages:返回用戶可接受的語(yǔ)言。 返回的語(yǔ)言是按照他們的偏好層次來(lái)排序的。第一個(gè)參數(shù)代表最優(yōu)先的語(yǔ)言。
假如你的應(yīng)用支持多語(yǔ)言,并且你想在終端用戶最喜歡的語(yǔ)言中顯示頁(yè)面,那么你可以使用語(yǔ)言協(xié)商方法 yiiwebRequest::getPreferredLanguage()。
這個(gè)方法通過(guò) yiiwebRequest::acceptableLanguages 在你的應(yīng)用中所支持的語(yǔ)言列表里進(jìn)行比較篩選,返回最適合的語(yǔ)言。
提示:你也可以使用 yiifiltersContentNegotiator 過(guò)濾器進(jìn)行動(dòng)態(tài)確定哪些內(nèi)容類型和語(yǔ)言應(yīng)該在響應(yīng)中使用。
這個(gè)過(guò)濾器實(shí)現(xiàn)了上面介紹的內(nèi)容協(xié)商的屬性和方法。
你可以通過(guò) yiiwebRequest::userHost 和 yiiwebRequest::userIP 分別獲取host name和客戶機(jī)的IP地址, 例如,
$userHost = Yii::$app->request->userHost; $userIP = Yii::$app->request->userIP;響應(yīng)(response)
當(dāng)應(yīng)用完成處理一個(gè)請(qǐng)求后, 會(huì)生成一個(gè)yiiwebResponse響應(yīng)對(duì)象并發(fā)送給終端用戶 響應(yīng)對(duì)象包含的信息有HTTP狀態(tài)碼,HTTP頭和主體內(nèi)容等。
網(wǎng)頁(yè)應(yīng)用開發(fā)的最終目的本質(zhì)上就是根據(jù)不同的請(qǐng)求構(gòu)建這些響應(yīng)對(duì)象。
在大多是情況下主要處理繼承自 yiiwebResponse 的 response 應(yīng)用組件, 盡管如此,Yii也允許你創(chuàng)建你自己的響應(yīng)對(duì)象并發(fā)送給終端用戶。
狀態(tài)碼構(gòu)建響應(yīng)時(shí),最先應(yīng)做的是標(biāo)識(shí)請(qǐng)求是否成功處理的狀態(tài),可通過(guò)設(shè)置 yiiwebResponse::statusCode 屬性,該屬性使用一個(gè)有效的HTTP 狀態(tài)碼。
例如,為標(biāo)識(shí)處理已被處理成功, 可設(shè)置狀態(tài)碼為200,如下所示:
Yii::$app->response->statusCode = 200;
盡管如此,大多數(shù)情況下不需要明確設(shè)置狀態(tài)碼,因?yàn)?yiiwebResponse::statusCode 狀態(tài)碼默認(rèn)為200, 如果需要指定請(qǐng)求失敗,可拋出對(duì)應(yīng)的HTTP異常,如下所示:
throw new yiiwebNotFoundHttpException;
當(dāng)錯(cuò)誤處理器 捕獲到一個(gè)異常,會(huì)從異常中提取狀態(tài)碼并賦值到響應(yīng), 對(duì)于上述的 yiiwebNotFoundHttpException 對(duì)應(yīng)HTTP 404狀態(tài)碼,以下為Yii預(yù)定義的HTTP異常:
yiiwebBadRequestHttpException: status code 400.
yiiwebConflictHttpException: status code 409.
yiiwebForbiddenHttpException: status code 403.
yiiwebGoneHttpException: status code 410.
yiiwebMethodNotAllowedHttpException: status code 405.
yiiwebNotAcceptableHttpException: status code 406.
yiiwebNotFoundHttpException: status code 404.
yiiwebServerErrorHttpException: status code 500.
yiiwebTooManyRequestsHttpException: status code 429.
yiiwebUnauthorizedHttpException: status code 401.
yiiwebUnsupportedMediaTypeHttpException: status code 415.
如果想拋出的異常不在如上列表中,可創(chuàng)建一個(gè)yiiwebHttpException異常,帶上狀態(tài)碼拋出,如下:
throw new yiiwebHttpException(402);HTTP 頭部
可在 response 組件中操控yiiwebResponse::headers來(lái)發(fā)送HTTP頭部信息,例如:
$headers = Yii::$app->response->headers; // 增加一個(gè) Pragma 頭,已存在的Pragma 頭不會(huì)被覆蓋。 $headers->add("Pragma", "no-cache"); // 設(shè)置一個(gè)Pragma 頭. 任何已存在的Pragma 頭都會(huì)被丟棄 $headers->set("Pragma", "no-cache"); // 刪除Pragma 頭并返回刪除的Pragma 頭的值到數(shù)組 $values = $headers->remove("Pragma");
補(bǔ)充: 頭名稱是大小寫敏感的,在yiiwebResponse::send()方法調(diào)用前新注冊(cè)的頭信息并不會(huì)發(fā)送給用戶。
響應(yīng)主體大多是響應(yīng)應(yīng)有一個(gè)主體存放你想要顯示給終端用戶的內(nèi)容。
如果已有格式化好的主體字符串,可賦值到響應(yīng)的yiiwebResponse::content屬性,例如:
Yii::$app->response->content = "hello world!";
如果在發(fā)送給終端用戶之前需要格式化,應(yīng)設(shè)置 yiiwebResponse::format 和 yiiwebResponse::data 屬性。
yiiwebResponse::format 屬性指定 yiiwebResponse::data 中數(shù)據(jù)格式化后的樣式,例如:
$response = Yii::$app->response; $response->format = yiiwebResponse::FORMAT_JSON; $response->data = ["message" => "helloworld"];
Yii支持以下可直接使用的格式,每個(gè)實(shí)現(xiàn)了 yiiwebResponseFormatterInterface 類, 可自定義這些格式器或通過(guò)配置 yiiwebResponse::formatters 屬性來(lái)增加格式器。
yiiwebResponse::FORMAT_HTML: 通過(guò) yiiwebHtmlResponseFormatter 來(lái)實(shí)現(xiàn).
yiiwebResponse::FORMAT_XML: 通過(guò) yiiwebXmlResponseFormatter來(lái)實(shí)現(xiàn).
yiiwebResponse::FORMAT_JSON: 通過(guò) yiiwebJsonResponseFormatter來(lái)實(shí)現(xiàn).
yiiwebResponse::FORMAT_JSONP: 通過(guò) yiiwebJsonResponseFormatter來(lái)實(shí)現(xiàn).
上述響應(yīng)主體可明確地被設(shè)置,但是在大多數(shù)情況下是通過(guò) 操作 方法的返回值隱式地設(shè)置,常用場(chǎng)景如下所示:
public function actionIndex(){ return $this->render("index"); }
上述的 index 操作返回 index 視圖渲染結(jié)果,返回值會(huì)被 response 組件格式化后發(fā)送給終端用戶。
因?yàn)轫憫?yīng)格式默認(rèn)為 yiiwebResponse::FORMAT_HTML, 只需要在操作方法中返回一個(gè)字符串, 如果想使用其他響應(yīng)格式,應(yīng)在返回?cái)?shù)據(jù)前先設(shè)置格式,例如:
public function actionInfo(){ Yii::$app->response->format = yiiwebResponse::FORMAT_JSON; return [ "message" => "hello world", "code" => 100, ]; }
如上所述,觸雷使用默認(rèn)的 response 應(yīng)用組件,也可創(chuàng)建自己的響應(yīng)對(duì)象并發(fā)送給終端用戶,可在操作方法中返回該響應(yīng)對(duì)象,如下所示:
public function actionInfo(){ return Yii::createObject([ "class" => "yiiwebResponse", "format" => yiiwebResponse::FORMAT_JSON, "data" => [ "message" => "hello world", "code" => 100, ], ]); }
注意: 如果創(chuàng)建你自己的響應(yīng)對(duì)象,將不能在應(yīng)用配置中設(shè)置 response 組件,盡管如此, 可使用 依賴注入應(yīng)用通用配置到你新的響應(yīng)對(duì)象。
瀏覽器跳轉(zhuǎn)瀏覽器跳轉(zhuǎn)依賴于發(fā)送一個(gè)Location HTTP 頭,因?yàn)樵摴δ芡ǔ1皇褂?,Yii提供對(duì)它提供了特別的支持。
可調(diào)用 yiiwebResponse::redirect() 方法將用戶瀏覽器跳轉(zhuǎn)到一個(gè)URL地址。
該方法設(shè)置合適的 帶指定URL的 Location 頭并返回它自己為響應(yīng)對(duì)象,在操作的方法中,可調(diào)用縮寫版 yiiwebController::redirect(),例如:
public function actionOld(){ return $this->redirect("http://example.com/new", 301); }
在如上代碼中,操作的方法返回redirect() 方法的結(jié)果,如前所述,操作的方法返回的響應(yīng)對(duì)象會(huì)被當(dāng)總響應(yīng)發(fā)送給終端用戶。
除了操作方法外,可直接調(diào)用 yiiwebResponse::redirect() 再調(diào)用 yiiwebResponse::send() 方法來(lái)確保沒有其他內(nèi)容追加到響應(yīng)中。
Yii::$app->response->redirect("http://example.com/new", 301)->send();
補(bǔ)充: yiiwebResponse::redirect() 方法默認(rèn)會(huì)設(shè)置響應(yīng)狀態(tài)碼為302,該狀態(tài)碼會(huì)告訴瀏覽器請(qǐng)求的資源 臨時(shí) 放在另一個(gè)URI地址上,可傳遞一個(gè)301狀態(tài)碼告知瀏覽器請(qǐng)求的資源已經(jīng) 永久 重定向到新的URId地址。
如果當(dāng)前請(qǐng)求為AJAX 請(qǐng)求,發(fā)送一個(gè) Location 頭不會(huì)自動(dòng)使瀏覽器跳轉(zhuǎn),為解決這個(gè)問題, yiiwebResponse::redirect() 方法設(shè)置一個(gè)值為要跳轉(zhuǎn)的URL的X-Redirect 頭, 在客戶端可編寫JavaScript 代碼讀取該頭部值然后讓瀏覽器跳轉(zhuǎn)對(duì)應(yīng)的URL。
補(bǔ)充: Yii 配備了一個(gè)yii.js JavaScript 文件提供常用JavaScript功能,包括基于X-Redirect頭的瀏覽器跳轉(zhuǎn), 因此,如果你使用該JavaScript 文件( 通過(guò)yiiwebYiiAsset 資源包注冊(cè)),就不需要編寫AJAX跳轉(zhuǎn)的代碼。
發(fā)送文件和瀏覽器跳轉(zhuǎn)類似,文件發(fā)送是另一個(gè)依賴指定HTTP頭的功能,Yii提供方法集合來(lái)支持各種文件發(fā)送需求,它們對(duì)HTTP頭都有內(nèi)置的支持。
yiiwebResponse::sendFile(): 發(fā)送一個(gè)已存在的文件到客戶端
yiiwebResponse::sendContentAsFile(): 發(fā)送一個(gè)文本字符串作為文件到客戶端
yiiwebResponse::sendStreamAsFile(): 發(fā)送一個(gè)已存在的文件流作為文件到客戶端
這些方法都將響應(yīng)對(duì)象作為返回值,如果要發(fā)送的文件非常大,應(yīng)考慮使用 yiiwebResponse::sendStreamAsFile() 因?yàn)樗?jié)約內(nèi)存,以下示例顯示在控制器操作中如何發(fā)送文件:
public function actionDownload(){ return Yii::$app->response->sendFile("path/to/file.txt"); }
如果不是在操作方法中調(diào)用文件發(fā)送方法,在后面還應(yīng)調(diào)用 yiiwebResponse::send() 沒有其他內(nèi)容追加到響應(yīng)中。
Yii::$app->response->sendFile("path/to/file.txt")->send();
一些瀏覽器提供特殊的名為X-Sendfile的文件發(fā)送功能,原理為將請(qǐng)求跳轉(zhuǎn)到服務(wù)器上的文件, Web應(yīng)用可在服務(wù)器發(fā)送文件前結(jié)束,為使用該功能,可調(diào)用yiiwebResponse::xSendFile(), 如下簡(jiǎn)要列出一些常用Web服務(wù)器如何啟用X-Sendfile 功能:
Apache: X-Sendfile
Lighttpd v1.4: X-LIGHTTPD-send-file
Lighttpd v1.5: X-Sendfile
Nginx: X-Accel-Redirect
Cherokee: X-Sendfile and X-Accel-Redirect
發(fā)送響應(yīng)在 send() 方法調(diào)用前響應(yīng)中的內(nèi)容不會(huì)發(fā)送給用戶,該方法默認(rèn)在yiibaseApplication::run() 結(jié)尾自動(dòng)調(diào)用,盡管如此,可以明確調(diào)用該方法強(qiáng)制立即發(fā)送響應(yīng)。
yiiwebResponse::send() 方法使用以下步驟來(lái)發(fā)送響應(yīng):
觸發(fā) yiiwebResponse::EVENT_BEFORE_SEND 事件.
調(diào)用 yiiwebResponse::prepare() 來(lái)格式化 yiiwebResponse::data 為yiiwebResponse::content.
觸發(fā) yiiwebResponse::EVENT_AFTER_PREPARE 事件.
調(diào)用 yiiwebResponse::sendHeaders() 來(lái)發(fā)送注冊(cè)的HTTP頭
調(diào)用 yiiwebResponse::sendContent() 來(lái)發(fā)送響應(yīng)主體內(nèi)容
觸發(fā) yiiwebResponse::EVENT_AFTER_SEND 事件.
一旦yiiwebResponse::send() 方法被執(zhí)行后,其他地方調(diào)用該方法會(huì)被忽略, 這意味著一旦響應(yīng)發(fā)出后,就不能再追加其他內(nèi)容。
如你所見yiiwebResponse::send() 觸發(fā)了幾個(gè)實(shí)用的事件,通過(guò)響應(yīng)這些事件可調(diào)整或包裝響應(yīng)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21623.html
摘要:簡(jiǎn)述這里簡(jiǎn)單歸納總結(jié)關(guān)于的錯(cuò)誤處理和日志記錄的操作。錯(cuò)誤處理器會(huì)正確地設(shè)置響應(yīng)的狀態(tài)碼并使用合適的錯(cuò)誤視圖頁(yè)面來(lái)顯示錯(cuò)誤信息。記錄一個(gè)警告消息用來(lái)指示一些已經(jīng)發(fā)生的意外。的義務(wù)是正確處理日志消息。相應(yīng)的消息通過(guò)被記錄。 簡(jiǎn)述 這里簡(jiǎn)單歸納總結(jié)關(guān)于Yii的錯(cuò)誤處理和日志記錄的操作。 錯(cuò)誤處理(Errors) Yii 內(nèi)置了一個(gè)yiiwebErrorHandler錯(cuò)誤處理器,它使錯(cuò)誤處理更...
摘要:認(rèn)證事件類在登錄和注銷流程引發(fā)一些事件。成功注銷后引發(fā)。提供兩種授權(quán)方法存取控制過(guò)濾器和基于角色的存取控制。允許已認(rèn)證用戶執(zhí)行操作。指定一個(gè)回調(diào)函數(shù)用于判定該規(guī)則是否滿足條件。 簡(jiǎn)述 在程序開發(fā)過(guò)程中,往往都不能忽視安全問題,無(wú)論你的框架有多么完美,都會(huì)有破綻,所以完善自己的系統(tǒng),從程序開發(fā)的安全角度去思考問題,把一切潛在的危機(jī)扼殺在搖籃中。 認(rèn)證(Authentication) 認(rèn)證...
摘要:簡(jiǎn)述是一個(gè)強(qiáng)大的代碼生成器,主要用于后臺(tái)代碼生成。下面列出由生成的文件,以便你研習(xí)功能和實(shí)現(xiàn),或修改它們控制器模型和視圖補(bǔ)充被設(shè)計(jì)成高度可定制和可擴(kuò)展的代碼生成工具。使用生成代碼是一個(gè)基于界面的代碼生成工具。 簡(jiǎn)述 Gii 是一個(gè)強(qiáng)大的代碼生成器,主要用于后臺(tái)代碼生成。 開始 Gii Gii 是 Yii 中的一個(gè)模塊??梢酝ㄟ^(guò)配置應(yīng)用的 yiibaseApplication::modu...
摘要:簡(jiǎn)述模塊是中的架構(gòu)的板塊,主要負(fù)責(zé)數(shù)據(jù)的展示,渲染模板文件,展示數(shù)據(jù)內(nèi)容。此外在一個(gè)視圖中還可以引入多個(gè)視圖文件,也是通過(guò)方法實(shí)現(xiàn)。布局文件的數(shù)據(jù)默認(rèn)以顯示,也可以用數(shù)據(jù)塊的形式渲染到視圖上。必須要確認(rèn)生成一次,才會(huì)正式生成新首頁(yè)。 簡(jiǎn)述 View模塊是Yii中的MVC架構(gòu)的V板塊,主要負(fù)責(zé)數(shù)據(jù)的展示,渲染模板文件,展示數(shù)據(jù)內(nèi)容。 基本概念 MVC在Yii里面有一個(gè)Views文件夾,里...
摘要:運(yùn)行來(lái)安裝指定的擴(kuò)展。這更便于用戶辨別是否是的擴(kuò)展。當(dāng)用戶運(yùn)行安裝一個(gè)擴(kuò)展時(shí),文件會(huì)被自動(dòng)更新使之包含新擴(kuò)展的信息。上述代碼表明該擴(kuò)展依賴于包。例如,上述的條目聲明將對(duì)應(yīng)于別名。為達(dá)到這個(gè)目的,你應(yīng)當(dāng)在公開發(fā)布前做測(cè)試。 簡(jiǎn)述 擴(kuò)展是專門設(shè)計(jì)的在 Yii 應(yīng)用中隨時(shí)可拿來(lái)使用的, 并可重發(fā)布的軟件包。 基礎(chǔ) 例如, yiisoft/yii2-debug 擴(kuò)展在你的應(yīng)用的每個(gè)頁(yè)面底部添加...
閱讀 2827·2021-11-17 09:33
閱讀 4521·2021-09-22 15:57
閱讀 2901·2019-08-30 14:16
閱讀 3158·2019-08-29 14:07
閱讀 2447·2019-08-26 11:55
閱讀 3467·2019-08-23 17:07
閱讀 1755·2019-08-23 16:50
閱讀 2595·2019-08-23 16:08