文档章节

Yii2.0 高级模版编写使用自定义组件(component)

SnowFlake
 SnowFlake
发布于 2016/06/20 16:15
字数 296
阅读 9
收藏 0

翻译自:http://www.yiiframework.com/wiki/760/yii-2-0-write-use-a-custom-component-in-yii2-0-advanced-template/

简单模版中添加自定义组件:http://www.yiiframework.com/wiki/747/write-use-a-custom-component-in-yii2-0/

我们实现的是添加一个读取真实IP的组件,下面是详细步骤:

1. 在项目根目录的common目录中新建components目录。

2. 在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;
                    }
                }
            }
        }
    }
 
}

3. 引入组件。打开common/config/main-local.php

添加下面的代码

<?php
return [
    'components' => [
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=yii2_demo',
            'username' => 'root',
            'password' => '',
            'charset' => 'utf8',
            'tablePrefix' => 'au_',
        ],
         //  新添加的
        'ReadHttpHeader' => [
            'class' => 'common\components\ReadHttpHeader'
        ],
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'viewPath' => '@common/mail',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => true,
        ],
    ],
];

4. 调用自定义组件。

打开任意一个Controller文件,比如我打开的是backend\controllers\SiteController.php。

在合适的地方调用组件。

public function actionIndex()
    {
         //自定义组件
        echo Yii::$app->ReadHttpHeader->RealIP();
        
        return $this->render('index');
    }

完。

本文转载自:http://www.cnblogs.com/mafeifan/p/4296767.html

SnowFlake
粉丝 9
博文 171
码字总数 0
作品 0
郑州
程序员
私信 提问
深入解析Angular Component的源码示例

本篇文章主要介绍了剖析Angular Component的源码示例,写的十分的全面细致,具有一定的参考价值,对此有需要的朋友可以参考学习下。如有不足之处,欢迎批评指正。 Web Component 定义 W3C为统...

前端攻城老湿
2018/12/22
0
0
Yii框架学习入门(1)--YII的MVC概念及逻辑解析

1、这里是win10安装的是Yii2.0,中文社区:http://www.yiichina.com/ 。 2、先了解安装方法: 服务器用的是wamp,将Yii2.0高级版解压文件放入www目录,将php加入全局命令(右击【计算机】-【...

wx599c47c7bdcad
2018/06/03
0
0
手把手教你实现微信小程序中的自定弹窗

前言 之前做小程序开发的时候,对于开发来说比较头疼的莫过于自定义组件了,当时官方对这方面的文档也只是寥寥几句,一笔带过而已,所以写起来真的是非常非常痛苦!! 好在微信小程序的库从 ...

飞翔的熊blabla
2018/08/27
0
0
微信小程序之自定义组件(附源码)

最近在项目开发中,遇到好多雷同的页面样式,就想着可以将常用的功能模块封装成组件,方便在项目中使用和修改,下面就参照微信小程序的文档分步骤写一个微信小程序的组件。 附上效果图: st...

yanyw
2018/08/02
0
0
ionic之新建一个画面-yellowcong

ionic搞起来后,现在要搞事情啊,得搞一个新的画面试试。在ionic中,新画面的创建,有三步。1、在page目录下,创建自己界面的文件夹,并创建与文件夹同名的html和ts文件,2、在ts文件中,创建...

yelllowcong
2018/02/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rime设置为默认简体

转载 https://github.com/ModerRAS/ModerRAS.github.io/blob/master/_posts/2018-11-07-rime%E8%AE%BE%E7%BD%AE%E4%B8%BA%E9%BB%98%E8%AE%A4%E7%AE%80%E4%BD%93.md 写在开始 我的Arch Linux上......

zhenruyan
今天
4
0
简述TCP的流量控制与拥塞控制

1. TCP流量控制 流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。 原理是通过确认报文中窗口字段来控制发送方的发送速率,发送方的发送窗口大小不能超过接收方给出窗口大小。...

鏡花水月
今天
8
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
903
11
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部