• 技术文章 >php框架 >YII

    yii 组件如何自定义

    爱喝马黛茶的安东尼爱喝马黛茶的安东尼2019-12-07 17:56:28原创774

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

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

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

    namespace common\components;
     
    use Yii;
    use yii\base\Component;
     
    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' => 'common\components\ReadHttpHeader'
            ],
        ],
    ];

    第四步:现在我们的组件方法可以被所有控制器调用,比如我们现在在我们的基础控制器(BaseController)中加载我们的组件ReadHttpHeader ,其他控制器都继承我们的基础控制器。

    <?php
     
    namespace frontend\controllers;
     
    use Yii;
    use yii\web\Controller; 
    class BaseController extends Controller {
     
        protected $session = false;
     
        public function actions() {
            return [
                      'error' => [
                                'class' => 'yii\web\ErrorAction',
                      ],
            ];
        }
     
        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入门教程,欢迎大家学习!

    以上就是yii 组件如何自定义的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:yii 组件 自定义
    上一篇:yii1和yii2的区别是什么 下一篇:yii2.0出现500错误怎么办
    大前端线上培训班

    相关文章推荐

    • 请问YII2的自定义组件应该放在什么位置,用什么文件名• yii2 $app里面如何自定义组件• Yii2.0 创建一个自定义组件方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网