视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
yii 组件如何自定义
2020-11-03 18:23:29 责编:小采
文档


下面是Yii2.0如何创建一个自定义组件的实例

第一步:在common下创建components文件夹。

第二步: 在新建的components文件夹中创建一个自定义组件,比如:ReadHttpHeader.php,代码如下:

namespace commoncomponents;
 
use Yii;
use yiiaseComponent;
 
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入门教程,欢迎大家学习!

下载本文
显示全文
专题