下面是YII2.0如何創建一個自定義組件的實例
第一步:在common下創建components文件夾。
第二步: 在新建的components文件夾中創建一個自定義組件,比如:ReadHttpHeader.php,代碼如下:
namespace?commoncomponents; ? use?Yii; use?yiibaseComponent; ? class?ReadHttpHeader?extends?Component?{ ? ????public??function?RealIP() ????{ ????????$ip?=?false; ? ????????$seq?=?array('HTTP_CLIENT_IP', ??????????????????'HTTP_X_FORWARDED_FOR' ??????????????????,?'HTTP_X_FORWARDED' ??????????????????,?'HTTP_X_CLUSTER_CLIENT_IP' ??????????????????,?'HTTP_FORWARDED_FOR' ??????????????????,?'HTTP_FORWARDED' ??????????????????,?'REMOTE_ADDR'); ? ????????foreach?($seq?as?$key)?{ ????????????if?(array_key_exists($key,?$_SERVER)?===?true)?{ ????????????????foreach?(explode(',',?$_SERVER[$key])?as?$ip)?{ ????????????????????if?(filter_var($ip,?FILTER_VALIDATE_IP)?!==?false)?{ ????????????????????????return?$ip; ????????????????????} ????????????????} ????????????} ????????} ????} ? }
注意: ‘common’ 已經在 common/config/bootstrap.php定義好了別名,可以直接使用。
第三步:打開common/config/main.php(main-local.php) 在配置文件中添加你的組件。
<?php return [ 'components' =>?[ ????????'ReadHttpHeader'?=>?[ ????????????'class'?=>?'commoncomponentsReadHttpHeader' ????????], ????], ];
第四步:現在我們的組件方法可以被所有控制器調用,比如我們現在在我們的基礎控制器(BaseController)中加載我們的組件ReadHttpHeader ,其他控制器都繼承我們的基礎控制器。
<?php namespace frontendcontrollers; use Yii; use yiiwebController; class BaseController extends Controller { protected $session = false; public function actions() { return [ 'error' =>?[ ????????????????????????????'class'?=>?'yiiwebErrorAction', ??????????????????], ????????]; ????} ? ????public?function?init()?{ ? ????????parent::init(); ? ????????//?IP?essential?for?prelim?DDoS?check ????????if?(!$this->cgS('UC-SEC.1a'))?{ ????????????$ip?=?Yii::$app->ReadHttpHeader->RealIP(); ????????????echo?$ip; ????????} ????} ? }
上面就是一個獲取真實IP的自定義組件,以此為例說明一下自定義組件的流程。
PHP中文網,有大量免費的Yii入門教程,歡迎大家學習!
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END