Yii ????? ????: ??????? ?? ? ??? ?? ??
【??】
? ??????? ??? ? ????? ??????? ??? ???? ????? ?? ? ?? ?? ??? ???? ???. Yii ?????? ??????? ??? ???? ??? ? ?? ?? ??? ??? ? ?? ??? ???? ??? ?????. ? ???? Yii ?????? ???? ??? ???? ?? ? ??? ??? ???? ??? ?????.
【?????】
????? ??????? ??? ???? ??? ??? ??? ?? ?? ??? ???? ?? ??? ????. Yii ??????? ????? beforeAction
? afterAction
???? ?? ?????. beforeAction
?????? ??, ??? ?? ?? ?? ?? ??? ?? ?? ??? ??? ? ??? afterAction
?????? ??? ??? ? ????. , ?? ?? ?? ??, ??? ?? ?? ?? beforeAction
和afterAction
方法來(lái)實(shí)現(xiàn)。在beforeAction
方法中,我們可以對(duì)請(qǐng)求進(jìn)行一些處理,例如記錄日志、驗(yàn)證用戶權(quán)限等;而在afterAction
方法中,我們可以對(duì)響應(yīng)進(jìn)行處理,例如添加一些額外的頭信息、調(diào)試輸出等。
【使用Yii中間件進(jìn)行日志記錄】
首先,我們需要?jiǎng)?chuàng)建一個(gè)中間件類,實(shí)現(xiàn)beforeAction
方法。在該方法中,我們可以記錄請(qǐng)求的一些關(guān)鍵信息,例如請(qǐng)求時(shí)間、請(qǐng)求URL等,并將其保存到日志文件中。
<?php namespace appmiddleware; use Yii; use yiiaseActionFilter; class LoggerMiddleware extends ActionFilter { public function beforeAction($action) { $request = Yii::$app->request; $log = "Request Time: " . date('Y-m-d H:i:s') . " "; $log .= "Request URL: " . $request->getAbsoluteUrl() . " "; $log .= "Request IP: " . $request->getUserIP() . " "; $log .= "---------------------------- "; // 保存日志到文件中 Yii::info($log, 'application'); return parent::beforeAction($action); } }
接下來(lái),在控制器中使用該中間件。假設(shè)我們有一個(gè)控制器名為SiteController
,我們可以在控制器類中添加behaviors
方法,并指定中間件類。
<?php namespace appcontrollers; use yiiwebController; class SiteController extends Controller { public function behaviors() { return [ 'logger' => [ 'class' => 'appmiddlewareLoggerMiddleware', ], ]; } // ...其他action方法... }
現(xiàn)在,當(dāng)我們?cè)L問(wèn)SiteController
中的任何一個(gè)action時(shí),請(qǐng)求的關(guān)鍵信息會(huì)被記錄到日志文件中。
【使用Yii中間件進(jìn)行調(diào)試輸出】
除了日志記錄之外,我們還可以使用Yii中間件來(lái)進(jìn)行調(diào)試輸出。在這種情況下,我們需要實(shí)現(xiàn)afterAction
方法,并在該方法中打印響應(yīng)的一些關(guān)鍵信息。
<?php namespace appmiddleware; use Yii; use yiiaseActionFilter; class DebugMiddleware extends ActionFilter { public function afterAction($action, $result) { $response = Yii::$app->response; $log = "Response Status Code: " . $response->statusCode . " "; $log .= "Response Content-Type: " . $response->getHeaders()->get('content-type') . " "; $log .= "Response Body: " . $response->content . " "; $log .= "---------------------------- "; // 輸出調(diào)試信息到屏幕上 Yii::trace($log, 'application'); return parent::afterAction($action, $result); } }
類似地,在控制器中使用該中間件。
<?php namespace appcontrollers; use yiiwebController; class SiteController extends Controller { public function behaviors() { return [ 'debug' => [ 'class' => 'appmiddlewareDebugMiddleware', ], ]; } // ...其他action方法... }
現(xiàn)在,當(dāng)我們?cè)L問(wèn)SiteController
?? ???? ???? ???? beforeAction
???? ???? ???. ? ????? ?? ??, ?? URL ?? ?? ??? ?? ?? ??? ???? ?? ?? ??? ??? ? ????.
rrreee
SiteController
?? ????? ??? ???? ???? ???? behaviors
???? ???? ???? ???? ??? ? ????. ??rrreee???? SiteController
? ?? ??? ????? ??? ?? ??? ?? ??? ?????. ????【??? ??? Yii ???? ??】???? ??? ?? ???? Yii ????? ??? ?? ????. ? ?? afterAction
???? ???? ? ????? ??? ?? ?? ??? ???? ???. ??rrreee??????? ?????? ? ????? ?????. ??rrreee???? SiteController
? ?? ??? ????? ??? ?? ??? ??? ??? ?????. ????【??】??Yii ??????? ???? ???? ??? ???? ??????? ?? ? ??? ??? ?? ??? ? ????. ??? ?? ??? ??????? ??? ? ? ???? ??? ???? ???? ? ??? ? ? ????. ???? ? ?? ?? ????? ??? ?? ??? ?? ? ??? ???, ?? ?? ???? ??? ??? ?? ????? ???? ??? ? ??? ????. ??? ??? Yii Framework ????: ??????? ?? ? ??? ??? ?????.? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

??? ??











Tomcat ????? ??? Java Servlet ? Java EE ??? ???? ?????. ??? ?????? Tomcat? HTTP ?? ? ??? ???? ? ??????? ?? ?? ??? ???? ?? ?????. Tomcat ????? ?? ??? ??? ????: 1. ???? ?? 2. ??? ?? ???? 4. ?? ?? 6. ????? ? ?? ??? 9. ???? ?? ?

Java ????? ?? ??? ?? ?????? ??? ? ?? ??? ???? ???. ??: ?? ?? ?? ???? ???? ??? ?? ???: ??? ?? ?? ?? ???: ??? ???? ?? ?? ?? ?? ???? ??: ?? ?? ? ?? ?? ??

???? ?? ???: log4j ?? ?? ??? ?? ? ??: ???? ??? ?? ??, ?? ?? ? ??? ?????? ??? ??? ???. ? ????? ??? ?? ??? ???? ??? ?? ??? ?? ?? ????? ???? ??? ???? log4j ?? ?? ??? ?? ?? ?????. ??: ????? ???? ??? ?? ??? ?????. ???? ?? ???? ?? ??? ?????? ???? ??? ??? ?? ?? ??? ? ??? ????? ???? ? ??? ? ? ????.

C++ ??? ???? ?? ?? ? ???? ??? ?????. ?? ??: ?? ?? ? ??, ??? ?? ?? ???? ???? ?? ?? ?? ??. ?? ??: ?? ?? ???? ???? ?? ??? ???? ?? ??? ?????. ??: ?? ? ?? ??? ???? ???? ??? ??? ??????. C++ ????? ??: std::cerr ? std::clog? ??? ?? ??. ?? ?? ?????: ?? ??? ? ?? ?? ??? ?? ?? ??? ?? ?? ?????? ?????. ??? ?? ?? ???: ??? ?? ???? ???? ?? ????? ????? ??? ??? ??? ???? ?? ?? ?????? ?????.

PSR-3 ?? ?????(?: Monolog, Log4php, PSR-3Logger) ?? ?? PHP ?? ?? ??(?: error_log(), syslog( ), debug_print_backtrace()). ??????? ??? ?????? ??? ???? ?? ??? ?? ?? ???? ???? ?? ??? ? ????. ?? ?? ??? ????. Monolog? ???? ???? ??? ??? ???? ??? ?????.

Python ?? ?? ?? ?? ??? ?? ??? ??(logger)? ??? ? ?? ???? ???? ???? ???? ????. ???? ??? ???? ???? ??? ????. ?? ??? DEBUG, INFO, WARNING, ERROR ? CRITICAL? ???? ?? ??? ?? ??? ?????. importlogging#"my_logger"?? ??? ???? ?? ??? INFOlogger=logging.getLogger("my_logger")logger.setLevel(log? ?????.

Tomcat ????? ?? ?? ??? ????? ?? ?? ??? ?????. Tomcat? ?? ???? ?? ?? Java ? ?? ? ??? ???????. ???? ???? ???? ????? Java ? ??????? ???? ???? ? ?????. Tomcat ????? ?? ?? ??? ? ? ????? ?? ?? ??? ?? ????? ???? ???. ? ????? ?? ?? ??? ?? Tomcat ????? ?? ?? ??? ?????. ?

Java ?????? ?? ??? ???? ???? ??? ? ??? ??? ?????. ?? ?? ?? ?? ??? ???? ?? ??. ??? ?? ????? ???? ???? ??? ?? ???? ?????. ??? ?? ???? ??? ??? ???? ?????. ?? ?? ?? ??? ?? ?? ????? ???? ???? ?????.
