Ubuntu 14.04 升级到 16.04 后,Gitlab、MySql 无法启动的问题

 

Gitlab 无法启动的解决

这个很简单重新配置一下就可以了,gitlab-ctl reconfigure,然后 gitlab-ctl start 。注意可能刚刚开始有一段时间会处于 502 http 错误状态,等一段时间以后就可以了

 

MySql 无法启动的解决

不知道在升级 Ubuntu 过程中选错了哪一步,导致使用了旧的 MySql 配置文件来配置新的,因此MySql 无法启动。此时的 my.cnf 文件链到了 /etc/mysql/my.cnf.migrated ,也就是旧版迁移过来的,其实这个文件开头部分已经说明了解决办法:

# 1. Move your customisations from this file to /etc/mysql/conf.d/ and
# to /etc/mysql/<variant>.conf.d/ as appropriate.
# 2. Run “update-alternatives –remove my.cnf /etc/mysql/my.cnf.migrated”
# 3. Remove the file /etc/mysql/my.cnf.migrated

如果没有什么特殊设置的话,直接执行 update-alternatives –remove my.cnf /etc/mysql/my.cnf.migrated 就可以解决问题了。

The score auto filler

先要注入JQuery

var script = document.createElement("script")
script.type = "text/javascript"
script.src = "http://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"
script.onload = function() {
console.log("jQuery 已经载入!得再运行一次!")
}
document.body.appendChild(script)

 

Get the inner frame document
var innerFrame = $(window.frames.zhuti.document);

学号:innerFrame.find(“#Form1 #DataGrid1 tr>td:contains(‘学号’)”)
姓名: innerFrame.find(“#Form1 #DataGrid1 tr>td:contains(‘学号’)”).next()
设置成绩:
innerFrame.find(“#Form1 #DataGrid1 tr>td:contains(‘学号’)”).next().next().find(“input”).val(平时成绩);
innerFrame.find(“#Form1 #DataGrid1 tr>td:contains(‘学号’)”).next().next().next().next().find(“input”).val(期末成绩) ;

In The Excel:
innerFrame.find(“”#Form1 #DataGrid1 tr>td:contains(‘学号’)””).next().next().find(“”input””).val(平时成绩);
innerFrame.find(“”#Form1 #DataGrid1 tr>td:contains(‘学号’)””).next().next().next().next().find(“”input””).val(期末成绩) ;

“精准识别”信息系统增强插件(暂时关闭)

非常抱歉,因系统有可能存在问题,为避免不必要的误会,本插件暂时关闭!如有变更,将会在此通知。

重要提示:为避免不必要的误会,如果你在使用系统过程中,遇上数据丢失、错误等问题需要向官方反馈时,请确定这些数据是在未使用本插件的情况下录入,或者尝试在未使用本插件的情况下,同样的错误是否存在。如果确实无法分辨,也要如实告知是否使用了本插件,这有利于系统官方技术人员以及插件作者帮助你解决问题。


本插件提供对系统以下增强功能:

  1. 自动把空白的非统计、非平均数值项填“0”;
  2. 自动计算合计、平均项 ;
  3. 给表单添加和去除颜色,以便区分;
  4. 重置Tab键索引,更改Tab键向右移动为向下移动。

(提示:目前该插件还未通过足够的测试,使用前请进行必要的校验,如果发现错误,请及时告知,在此页面留言即可,谢谢!)

使用方法:

Chrome谷歌浏览器:
  1. 登录系统,进入到信息采集->贫困户,打开贫困村的页面
  2. Chrome谷歌浏览器的系统菜单->更多工具->开发者工具(或者按下Ctrl + Shift + I),打开Console面板,在console命令行(带有一个“>”符号)输入以下命令,并按下回车执行命令:
    script=document.createElement("script");
    script.type="text/javascript";
    script.id="ScriptId";
    script.src="http://jzsb.weiva.com/inject2.js?rnd=" + Math.random();
    document.getElementsByTagName("head")[0].appendChild(script);
    

    如图:

  3. 插件会弹出提示,请根据情况选择;
  4. 选择确定后,就会在页面中出现插件操作界面: (版本更新后,界面可能与此不一致)
  5. 在编辑“生活生产条件”、“家庭经济状况”时,可以使用插件进行辅助填写。只要不退出信息采集页面,都可以一直使用。退出后需要再次注入上面的js代码,才能使用。

IE浏览器: 参考Chrome浏览器,打开开发人员工具(F12),选择控制台粘贴命令。 Bug修复日志:

  1. v0.0.2(20160109)
    1) A53项调整为四舍五入后的值;
    2)修复 A50-4 求和错误。因系统控件命名错乱,原程序自动求和时, A50-4 项未加入“国家惠农补贴”,此版本已经更正。
    以上两项 Bug 由 赵冰冰  发现并提供信息,谢谢!
    3)其他自动合计项合计后采用四舍五入取整。 
  2. v0.0.3(20160109)
    修复A50项重复计算 “国家惠农补贴”的错误。
    此项 Bug 由 北纬90° 发现并提供信息,谢谢!
  3. v0.0.4(20160110)
    1)修复求a19、a26、a33项平均数时小数点被错误取整的问题,修正后
    将四舍五入保留2位小数。
    2)修复求
    a18、a25、a27、a30、a31、a32项时,小数点被错误取整的问题,修正后将四舍五入保留2位小数。

    以上两项 Bug 由 彭师傅、赵冰冰  发现并提供信息,谢谢!
  4. v0.0.5(20160110)
    修复系统维护更新后插件无法工作的问题。并提供是否使用系统“一键合计”的功能(默认使用)。
    2016-01-10凌晨系统停机更新后自带了一键合计功能,同时导致表单结构发生变化,插件求和无法工作,此版本已经修复。
  5. v0.0.6(20160110)
    去掉了插件的自动合计功能,因为系统已经自带了“一键合计”功能。需要注意的是,在点“计算人均项”前要点“一键求和”。
  6. v0.0.7(20160110)
    修复上一版本忘记禁用自动合计功能,导致还是进行自动合计的错误。 
  7. v0.1.0(20160111)
    1)插件界面移动到系统顶端标题下。
    2)增加
    重置Tab键索引功能,更改Tab键向右移动为向下移动。

申明:
       版权声明:本程序版权使用MIT许可(Massachusetts Institute of Technology,MIT),使用者有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。其他内容参考MIT许可规定。         本程序仅供研究和学习,请勿用于非法用途。如果你对此有任何疑问或者顾虑,请勿使用,程序作者不确保算法的准确性、不对任何所涉及的行为负责。Bug报告及更新地址:http://www.weiva.com/archives/310。

        本程序为开源发布,如果质疑代码,可到如下地址下载校核: (如果只是使用,不需要下载下面的代码,请看上文提到的使用说明使用) http://jzsb.weiva.com/inject2.js

Excel电子表格统计分数段的数组公式

在做报表时,经常会遇上统计某一分数段的统计需求,完成这一需求方法很多,比较简单容易理解的是给数据加上一列分数档次列,利用公式先计算出这个分数的档次(例如10分分档的公式是:=int(@分数/10)*10),然后利用数据透视表进行统计。

但是上述公式需要在原始数据添加列,且步骤繁琐,这里介绍另外一种方法,是用数组公式进行统计,直接得出复合某一条件的统计。需要注意的是,数组公式必须在输入完成后,按下Ctrl+Shift+Enter进行输入,直接按下Enter是不行的,只有看到公式两端有一对大括号“{}”才是正确的。
例1:统计小于40分的数量
{=SUM(1*(表1[分数]<40))}
原理:数组公式会将参数作为一个数组对待,上例中“表1[分数]<40”会将分数列的每一项的每一行的分数与40进行比较,小于40得到 True 否则得到 False,返回的是一个包含 True 、False 的数组,将这个数字乘以1,True 乘以1 得1,False 乘以 1 得到0,这样就得到一个1、0的数组。最后使用 SUM公式进行统计,得到符条件的数量。
这样的逻辑看起来视乎很麻烦,但是运用得当,可以实现很复杂的交错条件统计:

例2:统计60分至69分的数量
{=SUM(1*(表1[分数]>=60)*(表1[分数]<70))}
说明:“并”关系只需要用乘号连起来就可以了。

例3:统计60分至69分并且不是作废的数量
{=SUM(1*(表1[分数]>=60)*(表1[分数]<70)*((表1[作废])=””))}

精准识别入户评估表反向导入程序v0.2.0

        该程序用于在广西精准识别入户工作中对入户评估表格进行反向导入。可以将一个文件夹内的所有入户评估表数据导入到一个电子表格当中,包括家庭成员信息,并提供简单的合法性校验。

        提示:如果连下载都没下载,就问怎么用,那还是别用了,人工操作吧。没一点Excel 基础的,还是自己百度教程补补吧,以后家里买菜算个帐也还用得着。

建议先尝试导入本程序附带的测试评估表。如果附带的测试评估表都无法导入,则说明Office软件版本不对,可能是版本不够高或者安装的是阉割版。本程序是在正版的Office360下制作的,其他版本没有条件测试。视乎理论上有可能也许Office2007以上版本可以。

下载地址:
评估表反向导入程序v0.2.0
评估表反向导入程序v0.1.0
评估表反向导入程序v0.0.3
评估表反向导入程序v0.0.2

更新及Bug 修复日志:

  1. v0.0.3 修复表格评估日期格式 
  2. v0.1.0 提供两种导入方式:
    A:全部导入,速度较慢,每分钟10户左右;
    B:局部导入,17项里面的部分使用了CheckBox控件的选项不导入,这样可以通过禁用宏来提高速度,达到每分钟40户左右。
    修复部分项目未导入问题;
    修改了部分提示文字;
    修改了测试用的评估表。
  3. v0,2.0 家庭成员表格式变更
            导入后的家庭成员表格按照新的通知要求变更,与之前的相比,包含户主信息、村小组字段,字段顺序有变化。相应的调整身份证重复性校验,无论数据表还是家庭成员数据表,身份证重复性校验都只统计家庭成员数据表的内容。(注意:通知上要求是提交16岁以上的,如果你的表格只填写18岁以上的,那是不会给你变出16岁到18岁之间的人的。再次为这种奇葩的通知差评)
    增加导入xlsx格式表格的功能,但是必须在第二步选择“是”才能导入xlsx格式的表格。测试数据表增加xlsx格式表格。
    测试数据表内容变化。
    程序文件更改为xlsb格式,以提高运行速度。 

(图中姓名、身份证等信息为测试虚构,如有雷同,纯属奇葩)

本程序在导入数据完毕后,提供以下辅助功能:

1、对户主、家庭成员的身份证校验。校验标准:GB 11643-1999。
2、对户主、家庭成员身份证号码重复次数校验,如果结果大于2,则说明该身份证号出现多次,请注意检查。
3、对家庭成员与户主关系的性别进行校验,避免把一个公的做别人老妈。
4、计算家庭成员年龄。
5、自动生成一分一档数据。表格里面的累计项就自己做做吧,不会的话就去网上恶补电子表格的公式。不过,这个表据说不用做了。

版权声明:本程序版权使用MIT许可(Massachusetts Institute of Technology,MIT),使用者有权利使用、复制、修改、合并、出版发行、散布、再授权及贩售软件及软件的副本。其他内容参考MIT许可规定。

Zend Framework2 中的Repository仓库模式及分页应用

Zend Framework2 中的Repository仓库模式

Repository仓库模式是提供将多个、一批资源雷竞技苹果下载地址作为集合使用的一种雷竞技苹果下载地址使用模式,在对资源进行浏览、查询、搜索以及输出到页面时非常有用,符合人们的正常思维逻辑。

使用Repository模式对Entity管理的步骤:

1、仓库类的目录
在ZendFramework2中,Doctrine2的Repository类存放在模块的src/Entity/Repository目录下。

2、使用仓库进行分页
配置路由
在路由中添加路由参数page

在实体中指定仓库

/** @ORMEntity(repositoryClass="YourModuleEntityRepositoryYourRepository")
*/
class YourEntity {
}

在项目模块的src模块名 下创建目录 Paginator,添加Doctrine2分页适配器 Adapter.php,其内容如下:

<?php
namespace YouModulePaginator;

use DoctrineORMEntityRepository;
use ZendPaginatorAdapterAdapterInterface;
class Adapter implements AdapterInterface{
    protected  $repository;

    /**
     * @param EntityRepository $repository
     */
    function __construct($repository)
    {
        $this->repository = $repository;
    }

    /**
     * @param int $offset               Page offset
     * @param int $itemCountPerPage     Number of items per page
     * @return array
     */
    public function getItems($offset,$itemCountPerPage){
        return $this->repository->getItems($offset,$itemCountPerPage);
    }

    /**
     * @return int
     */
    public function count(){
        return $this->repository->count();
    }
}

在模块文件 module.php 中添加分页助手的工厂模式:

                    'YourModulePaginatorYouEntity'=>function($sm){
                        $enm = $sm->get('DoctrineORMEntityManager');
                        $YouEntityRepository = $enm->getRepository('YourModuleEntityYouEntity');
                        $adapter = new YourModulePaginatorAdapter($YourEntityRepository);
                        $page = $sm->get('application')
                            ->getMvcEvent()
                            ->getRouteMatch()
                            ->getParam('page');
                        $paginator = new Paginator($adapter);
                        $itemCountPerPage = 10;//每页项目数
                        $paginator->setCurrentPageNumber($page)
                            ->setItemCountPerPage($itemCountPerPage);
                        return $paginator;
                    }

添加分页翻页模板 viewmoduleNamepartialspaginator.phtml

修改控制器的action

Doctrine 2 ORM 2 文档 5. Association Mapping 非专业局部翻译

原文地址:http://docs.doctrine-project.org/en/latest/reference/association-mapping.html

注:本文只针对本人使用到的关系类型进行翻译,未使用到的以后有空再补上。

5. Association Mapping

This chapter explains mapping associations between objects.
这一章节介绍雷竞技苹果下载地址之间的关系映射。

Instead of working with foreign keys in your code, you will always work with references to objects instead and Doctrine will convert those references to foreign keys internally.
你将使用雷竞技苹果下载地址关联(references)和Doctrine替代你原来代码中数据库外键的工作。

  • A reference to a single object is represented by a foreign key.
    一个关联到单个雷竞技苹果下载地址对应一个数据库的外键。
  • A collection of objects is represented by many foreign keys pointing to the object holding the collection
    一个雷竞技苹果下载地址的集合代表许多外键指向这个雷竞技苹果下载地址所在的集合。
  • This chapter is split into three different sections.
    本章分为三个不同的部分:

  • A list of all the possible association mapping use-cases is given.
    所有可用的雷竞技苹果下载地址映射关系列表
  • Mapping Defaults are explained that simplify the use-case examples.
    默认映射介绍简单的使用实例。
  • Collections are introduced that contain entities in associations.
    集合介绍链接实体映射。
  • To gain a full understanding of associations you should also read about owning and inverse sides of associations
    如果需要完全了解雷竞技苹果下载地址映射,你可以阅读owning and inverse sides of associations

    目录
    5.1. Many-To-One, Unidirectional 多对一,单向(用户 对 地址)
    5.2. One-To-One, Unidirectional 一对一,单向()
    5.3. One-To-One, Bidirectional 一对一,双向(顾客 对 购物车)
    5.4. One-To-One, Self-referencing 一对一,自指向
    5.5. One-To-Many, Bidirectional 一对多,双向(产品 对 特点)
    5.6. One-To-Many, Unidirectional with Join Table 一对多,使用表的单向
    5.7. One-To-Many, Self-referencing 一对多,自指向(层级分类、文章栏目分类)
    5.8. Many-To-Many, Unidirectional 多对多,单向
    5.9. Many-To-Many, Bidirectional 多对多,双向
    5.9.1. Owning and Inverse Side on a ManyToMany association
    5.10. Many-To-Many, Self-referencing 多对多,自指向
    5.11. Mapping Defaults 默认映射
    5.12. Collections 集合
    5.13. Initializing Collections 初始化集合

    PS:
    一对多和多对一底层数据库结构完全一样,都是在[多]方创建外键;
    一对多只提供[一]方对[多]方的访问,[多]方没有[一]方的引用.如果有,就变成双向关联了;
    只需在[一]方配置,[多]方不需要;

    5.1. Many-To-One, Unidirectional
    5.1. 多对一,单向

    A many-to-one association is the most common association between objects.
    多对一映射是非常常见的雷竞技苹果下载地址关系。

    <?php
    /** @Entity **/
    class User
    {
        // ...
    
        /**
         * @ManyToOne(targetEntity="Address")
         * @JoinColumn(name="address_id", referencedColumnName="id")
         **/
        private $address;
    }
    
    /** @Entity **/
    class Address
    {
        // ...
    }
    

    The above @JoinColumn is optional as it would default to address_id and id anyways. You can omit it and let it use the defaults.
    上述代码中的 @JoinColumn 是设置默认映射使用User.address_id关联到Address.id,你可以删除它,以使用默认值。

    Generated MySQL Schema:
    生成的 MySQL 代码:

    CREATE TABLE User (
    id INT AUTO_INCREMENT NOT NULL,
    address_id INT DEFAULT NULL,
    PRIMARY KEY(id)
    ) ENGINE = InnoDB;
    
    CREATE TABLE Address (
    id INT AUTO_INCREMENT NOT NULL,
    PRIMARY KEY(id)
    ) ENGINE = InnoDB;
    
    ALTER TABLE User ADD FOREIGN KEY (address_id) REFERENCES Address(id);
    

    5.7. One-To-Many, Self-referencing
    5.7. 一对多,自指向

    You can also setup a one-to-many association that is self-referencing. In this example we setup a hierarchy of Category objects by creating a self referencing relationship. This effectively models a hierarchy of categories and from the database perspective is known as an adjacency list approach.
    你可以设置自指向的关系映射。在本例中,将创建一个使用自指向的层级的分类雷竞技苹果下载地址映射关系。可以在数据库的关系视图中看到他们的层级关系。
    PS:这个关系的典型应用应该是文章的栏目分类、用户角色等树状结构。

    &lt;?php
    /** @Entity **/
    class Category
    {
        // ...
        /**
         * @OneToMany(targetEntity="Category", mappedBy="parent")
         **/
        private $children;
    
        /**
         * @ManyToOne(targetEntity="Category", inversedBy="children")
         * @JoinColumn(name="parent_id", referencedColumnName="id")
         **/
        private $parent;
        // ...
    
        public function __construct() {
            $this-&gt;children = new DoctrineCommonCollectionsArrayCollection();
        }
    }
    

    Note that the @JoinColumn is not really necessary in this example, as the defaults would be the same.
    例子中的 @JoinColumn 可不写,默认值也是这样。

    Generated MySQL Schema:
    生成的 MySQL 代码:

    CREATE TABLE Category (
        id INT AUTO_INCREMENT NOT NULL,
        parent_id INT DEFAULT NULL,
        PRIMARY KEY(id)
    ) ENGINE = InnoDB;
    ALTER TABLE Category ADD FOREIGN KEY (parent_id) REFERENCES Category(id);
    

    基于 ZendFramework2 框架搭建网站系统的步骤

    ZendFramework2(ZF2) 是 php 东家 zend 公司的亲儿子框架,网上介绍也比较多,这里就不再重复了。国内使用比较少,确实比较庞大和臃肿,但是在辗转其他一些 php 开源框架后,还是决定使用ZF2。下面将现在我正在开发的项目流程做一个简要的记录:

    一、使用ZF2官方提供的 Skeleton Application 搭建基本网站结构

    这一步网上的教程比较多,官网也说得比较清楚,这里不再详述。安装完成后,你就拥有了一个基于ZF2框架的MVC系统。
    官网链接:Get the Skeleton Application

    二、安装和配置 Doctrine 2 

    这一步是让系统实现 ORM 的开发模式。

    三、安装zfc-user 、zfc-user-doctrine-orm、BjyAuthorize

    完成这一步以后,你得系统就拥有了基于 ORM 模式的用户-角色权限功能。

    其他参考:
    Dortrine 2 命令行常用命令说明
    ZfcUser配置文件不完全不专业翻译

    外站参考:
    ZendFramework2 官网    手册   API参考


    ZendFramework2 模块
     


    Doctrine2 官网
    Doctrine logo

    ZendFramework 2 用户模块 ZfcUser配置文件不完全不专业翻译

    ZfcUser 项目地址:https://github.com/ZF-Commons/ZfcUser

    <?php
    /**
     * ZfcUser Configuration
     *
     * If you have a ./config/autoload/ directory set up for your project, you can
     * drop this config file in it and change the values as you wish.
     */
    $settings = array(
        /**
         * ZendDbAdapterAdapter DI Alias
         *
         * Please specify the DI alias for the configured ZendDbAdapterAdapter
         * instance that ZfcUser should use.
         */
        //'zend_db_adapter' => 'ZendDbAdapterAdapter',
    
        /**
         * User Model Entity Class
         * 用户实体类
         *
         * Name of Entity class to use. Useful for using your own entity class
         * instead of the default one provided. Default is ZfcUserEntityUser.
         * The entity class should implement ZfcUserEntityUserInterface
         * 指定哪个类为用户实体类。可以使用你自己的类来替换系统提供的。默认是
         * ZfcUserEntityUser。这个类实现了 ZfcUserEntityUserInterface 接口。
         */
        //'user_entity_class' => 'ZfcUserEntityUser',
        //'user_entity_class' => 'IchcmsEntityUser',
    
        /**
         * Enable registration
         * 是否开启注册
         *
         * Allows users to register through the website.
         *
         * Accepted values: boolean true or false
         */
        //'enable_registration' => true,
    
        /**
         * Enable Username
         * 是否开启用户名(默认不开启)
         *
         * Enables username field on the registration form, and allows users to log
         * in using their username OR email address. Default is false.
         * 开启后用户名将出现在注册表单中,并且允许用户使用用户名或者邮箱进行登录。
         *
         * Accepted values: boolean true or false
         */
        //'enable_username' => false,
    
        /**
         * Authentication Adapters
         * 鉴权适配器
         *
         * Specify the adapters that will be used to try and authenticate the user
         * 指定用于鉴权的适配器
         *
         * Default value: array containing 'ZfcUserAuthenticationAdapterDb' with priority 100
         * Accepted values: array containing services that implement 'ZfcUserAuthenticationAdapterChainableAdapter'
         */
        'auth_adapters' => array( 100 => 'ZfcUserAuthenticationAdapterDb' ),
    
        /**
         * Enable Display Name
         * 是否开启昵称(默认关闭)
         *
         * Enables a display name field on the registration form, which is persisted
         * in the database. Default value is false.
         * 开启后,昵称表单将显示在注册表单,昵称将存储在数据库。
         * Accepted values: boolean true or false
         */
        //'enable_display_name' => true,
    
        /**
         * Modes for authentication identity match
         * 设置身份鉴权的id匹配模式
         *
         * Specify the allowable identity modes, in the order they should be
         * checked by the Authentication plugin.
         * 设置可以使用作为身份鉴权的id模式,将提供给鉴权适配器使用。
         * Default value: array containing 'email'
         * Accepted values: array containing one or more of: email, username
         * 值是一个数组,默认是 email,可以指定包括 email,username在内的一个或者多个选项
         */
        //'auth_identity_fields' => array( 'email' ),
    
        /**
         * Login form timeout
         * 设置登录超时
         *
         * Specify the timeout for the CSRF security field of the login form
         * in seconds. Default value is 300 seconds.
         *
         * Accepted values: positive int value
         */
        //'login_form_timeout' => 300,
    
        /**
         * Registration form timeout
         * 设置注册超时
         *
         * Specify the timeout for the CSRF security field of the registration form
         * in seconds. Default value is 300 seconds.
         *
         * Accepted values: positive int value
         */
        //'user_form_timeout' => 300,
    
        /**
         * Login After Registration
         * 设置注册成功后是否自动登录(默认是)
         *
         * Automatically logs the user in after they successfully register. Default
         * value is false.
         *
         * Accepted values: boolean true or false
         */
        //'login_after_registration' => true,
    
        /**
         * Registration Form Captcha
         * 是否使用验证码注册
         *
         * Determines if a captcha should be utilized on the user registration form.
         * Default value is false.
         * 指定是否显示一个验证码在用户注册表单,默认是否
         */
        //'use_registration_form_captcha' => false,
    
        /**
         * Form Captcha Options
         * 设置表单验证码
         *
         * Currently used for the registration form, but re-usable anywhere. Use
         * this to configure which ZendCaptcha adapter to use, and the options to
         * pass to it. The default uses the Figlet captcha.
         * 此设置作用在注册表单,但是也可以用在其他地方。这里设置将对 ZendCaptcha 模块起作用。
         * 注:默认提供的验证码并不是图片,而是非常囧的文字图验证码。
         *
         *
         */
        /*'form_captcha_options' => array(
            'class'   => 'figlet',
            'options' => array(
                'wordLen'    => 5,
                'expiration' => 300,
                'timeout'    => 300,
            ),
        ),*/
    
        /**
         * Use Redirect Parameter If Present
         * 设置是否重定向跳转
         *
         * Upon successful authentication, check for a 'redirect' POST or GET parameter
         * 如果登录成功,按照 POST 或者 GET 数据中是否存在 redirect 参数进行跳转。
         * 默认是是。
         *
         * Accepted values: boolean true or false
         */
        //'use_redirect_parameter_if_present' => true,
    
        /**
    	 * Sets the view template for the user login widget
         * 设置用户登录的视图模板
    	 *
    	 * Default value: 'zfc-user/user/login.phtml'
         * Accepted values: string path to a view script
    	 */
        //'user_login_widget_view_template' => 'zfc-user/user/login.phtml',
    
        /**
         * Login Redirect Route
         * 登录后的重定向路由
         *
         * Upon successful login the user will be redirected to the entered route
         *
         * Default value: 'zfcuser'
         * Accepted values: A valid route name within your application
         *
         */
        //'login_redirect_route' => 'zfcuser',
    
        /**
         * Logout Redirect Route
         * 注销后的重定向路由
         *
         * Upon logging out the user will be redirected to the entered route
         *
         * Default value: 'zfcuser/login'
         * Accepted values: A valid route name within your application
         */
        //'logout_redirect_route' => 'zfcuser/login',
    
        /**
         * Password Security
         * 密码安全
         *
         * DO NOT CHANGE THE PASSWORD HASH SETTINGS FROM THEIR DEFAULTS
         * Unless A) you have done sufficient research and fully understand exactly
         * what you are changing, AND B) you have a very specific reason to deviate
         * from the default settings and know what you're doing.
         *
         * The password hash settings may be changed at any time without
         * invalidating existing user accounts. Existing user passwords will be
         * re-hashed automatically on their next successful login.
         */
    
        /**
         * Password Cost
         *
         * The number represents the base-2 logarithm of the iteration count used for
         * hashing. Default is 14 (about 10 hashes per second on an i5).
         *
         * Accepted values: integer between 4 and 31
         */
        //'password_cost' => 14,
    
        /**
         * Enable user state usage
         * 是否使用用户状态功能(视乎默认未开启)
         *
         * Should user's state be used in the registration/login process?
         */
        //'enable_user_state' => true,
    
        /**
         * Default user state upon registration
         * 用户注册后的默认状态值(默认1),数据库对应 state 字段
         *
         * What state user should have upon registration?
         * Allowed value type: integer
         */
        //'default_user_state' => 1,
    
        /**
         * States which are allowing user to login
         * 哪一种状态值的用户允许登录(默认1)
         *
         * When user tries to login, is his/her state one of the following?
         * Include null if you want user's with no state to login as well.
         * Allowed value types: null and integer
         */
        //'allowed_login_states' => array( null, 1 ),
    
        /**
         * User table name
         * 用户数据表
         */
        //'table_name' => 'user',
    
        /**
         * End of ZfcUser configuration
         */
    );
    
    /**
     * You do not need to edit below this line
     */
    return array(
        'zfcuser' => $settings,
        'service_manager' => array(
            'aliases' => array(
                'zfcuser_zend_db_adapter' => (isset($settings['zend_db_adapter'])) ? $settings['zend_db_adapter']: 'ZendDbAdapterAdapter',
            ),
        ),
    );