2017年2月

beforeAction的一个示例

public function beforeAction($action)
{
    if(condition){
        Yii::$app->response->format = Response::FORMAT_JSON;
        Yii::$app->response->data = array(
            'status' => -1,
            'message' => '请先登录',
            'url' => \Yii::$app->getHomeUrl()
        );
        return false;
    }

    return true;
}

这个函数只返回bool值,响应内容交给 response

原文

局部关闭csrf验证

创建一个hehavior

<?php
use Yii;
use yii\base\ActionEvent;
use yii\base\Behavior;
use yii\web\Controller;


class NoCsrf extends Behavior
{
    public $actions = [];
    public $controller;
    public function events()
    {
        return [Controller::EVENT_BEFORE_ACTION => 'beforeAction'];
    }
    public function beforeAction($event)
    {
        $action = $event->action->id;
        if(in_array($action, $this->actions)){
            $this->controller->enableCsrfValidation = false;
        }
    }    
}

在controller中调用

<?php

    public function behaviors()
    {
        return [
            'csrf' => [
                'class' => NoCsrf::className(),
                'controller' => $this,
                'actions' => [
                    'action-name'
                ]
            ]
        ];
    }

这种方法是将控制器中指定的路由方法不经过csrf验证,如果是全局关闭csrf验证的话直接在 controller 添加

//关闭csrf验证
public $enableCsrfValidation = false;

原文地址

docker(2) 创建属于自己的库

上一章是了解了怎么创建一个容器,现在我们来把它做成我们自己的库,类似git那样的

首先查看下自己的库有哪些

➜  ~ docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                      PORTS               NAMES
4cd577624dd2        ubuntu                  "/bin/bash"         2 days ago          Exited (127) 16 hours ago                       little_cat
80ac1b1ba419        ubuntu                  "/bin/bash"         2 days ago          Exited (0) 2 days ago                           determined_bhaskara
ce5104ceef1f        ubuntu                  "/bin/bash"         4 days ago          Exited (0) 4 days ago                           small_hugle

我们上次创建并操作的容器就是名字是little_cat 而且它的容器id为4cd577624dd2 正是我们需要的

接下来就是在docker官网上注册一个账号,过程也很简单,填个账户,邮箱,密码 邮箱再验证一下就好

本地我们登陆一下

➜  ~ docker ps -a

输入有效的账户信息就行,他会在 $HOME/.docker/config.json 文件中生成一条 auth 信息

登陆成功后,我们把指定的容器做成我们自己的库

➜  ~ docket commit 4cd577624dd2 gaofeifiy/ubuntu-base

这条命令的作用就是把 containerId 为 4cd577624dd2 (也就是 little_cat) 提交给 gaofeifiy/ubuntu-base 这个库,
注意,这里commit的时候要用到id而不是容器的name,我自己试的时候就出现提交为none的情况,也许以后的版本会补上

这个有什么作用呢? 我们查看一下images

➜  ~ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
gaofeifiy/ubuntu-base   latest              6f8cfa1871b0        40 minutes ago      227 MB
ubuntu                  16.04               f49eec89601e        4 weeks ago         129.5 MB
ubuntu                  latest              f49eec89601e        4 weeks ago         129.5 MB

我们最早的 little_cat 已经在本地被做成一个基础的images了

直接用它创建一个容器

➜  ~ docker run -t -i --name big_cat gaofeifiy/ubuntu-base /bin/bash


➜  ~ docker ps -a
CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS                      PORTS               NAMES
10ea9940c6d2        gaofeifiy/ubuntu-base   "/bin/bash"         48 seconds ago      Exited (0) 39 seconds ago                       big_cat

我们用刚才新建的image为基础创建了 big_cat 这个容器

要删除的话也是很简单,这里有两个命令 docker rmdocker rmi

docker rm 10ea9940c6d2 这是用来删除容器(CONTAINER)的
docker rmi 6f8cfa1871b0 这是用来删除镜像的(IMAGE) 的

有一点需要注意的就是如果要删除的image是有container在使用的话需要先把container给删除再删除image

docker(1)入门

开始

首先在docker官网或者国内的daoCloud来下载工具,不推荐新手在直接通过brew来安装 docker-machine

根据安装导航安装好就行

刚接触一个新玩具最先要做的就是让他跑起来

打开命令行,输入命令

docker version

lient:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 23:26:11 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.12.3
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   6b644ec
 Built:        Wed Oct 26 23:26:11 2016
 OS/Arch:      linux/amd64

运行正常

接下来我们用到了几个命令

docker run  运行一个主机
docker ps   列出正在运行的主机
docker attach  附着到指定的主机上
docker pull    从远程拉下指定的容器
docker images  列出下载到本地的容器

首先开启运行一个ubuntu容器

docker run -i -t ubuntu /bin/bash

解释一下命令含义:

运行ubuntu容器,

-i 保证容器中的 STDIN 是开启的,

-t 为容器生成一个伪tty终端

ubuntu 以ubuntu作为基础镜像,同理可以使用 centos,debain之类的

更多的命令 输入 docker run --help 可以查看

执行这条命令的时候,如果本地没有 ubuntu 的话会自动执行 docker pull ubuntu 拉取默认的ubuntu镜像到本地,执行完毕后就会进入容器中的bash界面,相当于一个ubuntu的虚拟机,执行 hostname 查看homeId
执行 exit推出容器内部界面,当退出的时候容器也将停止运行

退出后到本地的终端界面

docker ps -a


CONTAINER ID        IMAGE               COMMAND             CREATED                  STATUS                       PORTS               NAMES
572fd5bda011        ubuntu              "-i -t /bin/bash"   Less than a second ago   Created                                          hungry_franklin
4cd577624dd2        ubuntu              "/bin/bash"         58 minutes ago           Exited (127) 9 minutes ago                       little_cat
80ac1b1ba419        ubuntu              "/bin/bash"         About an hour ago        Exited (0) 59 minutes ago                        determined_bhaskara
ce5104ceef1f        ubuntu              "/bin/bash"         47 hours ago             Exited (0) 47 hours ago                          small_hugle

列出所有的容器,每次 docker run 都会新创建一个容器, 相当于每次运行的时候都是一个初始的容器

如果想接着上次退出的就执行

docker start 4cd577624dd2
docker start little_cat

这两条执行的效果是一样的,都是指向同一个容器

但是这时只是开启了,我们想进入这个容器里怎么办? 执行下一条命令

docker attach littlt_cat

这样就会进入到容器里面的界面

忘了说了,如果想创建一个指定名字的容器就添加一个 --name 参数 比如

docker run -d --name littl_cat ubuntu /bin/bash

这里的 -d 就是以守护进程的方式在后台运行 --name 就是指定了容器的名字,如果不指定的话也会随机分配一个

composer的一个小毛病

当环境中同时安装xdebug和composer的时候,会产生一个报错

You are running composer with xdebug enabled. This has a major impact on runtime performance. See Https://getcomposer.org/xdebug

其实作为开发环境来说,并没有太大的影响,也就是拖慢了composer的运行速度,大概3-4倍的样子。

当然,如果不想让那个 warning 再显示就先全局关闭xdebug

首先知道到php.ini的文件路径

➜  ~ php -i | grep "php.ini"
Configuration File (php.ini) Path => /usr/local/etc/php/7.0
Loaded Configuration File => /usr/local/etc/php/7.0/php.ini

编辑php.ini文件 找到xdebug扩展的位置给加上引号注释下就行

;[xdebug]
;zend_extension="/usr/local/opt/php70-xdebug/xdebug.so"
~

如果php.ini文件当中没有这个模块的配置,就找找php.ini同级目录下的 conf.d 目录,那里也是加载php扩展的配置文件的

比如我的路径就是

cd /usr/local/etc/php/7.0/conf.d/ext-xdebug.ini

一样给注释掉就行

参考1

参考2