1. 青云 iframe 应用开发

    上周的主要工作是将产品的功能集成到青云。青云提供 iframe 的方式来集成第三方服务,这是一种互利的做法,而且对于青云来说,实现的代价也非常小。

    先上图,看看集成的效果:

    ygc-in-qingcloud


    对于青云来说,一个iframe应用就是一个URL,由应用开发者提供这个URL,当青云用户访问应用所在的页面时,页面先自动向应用服务器的URL发送数据请求,请求会携带认证信息,应用服务端需要先校验请求确实来自青云,并获取请求中的用户信息,最终响应一个HTML页面内容,青云应用页面收到响应数据后将其置于一个iframe标签中,之后青云用户在iframe页面中的操作都是直接与应用服务器交互。

    qingcloud-iframe-interaction

    上图交互流程的第2步中,青云服务器向用户响应的内容最终会生成一个包含以下内容的页面:

    <form method="POST" action="URL" target="appframe">
        <input type="hidden" name="payload" value="...">
        <input type="hidden" name="signature" value="...">
    </form>
    <iframe id="..." name="appframe" width="100 …
    Tagged as : 笔记 工作 总结
  2. Yii源码阅读笔记 - 错误/异常处理

    概述

    PHP区分“错误”(Error)和“异常”(Exception)。“错误”通常是由PHP内部函数抛出,表示运行时问题,当然也可以通过函数trigger_erroruser_error抛出一个用户级别的error/warning/notice信息。但在引入面向对象之后,相比使用trigger_error抛出错误,使用throw抛出异常更常用。

    对于“错误”,PHP允许配置报告哪些级别/类型错误、是否(向用户)展示错误、是否对错误记录日志、错误日志记到哪,分别对应php.ini中的配置项:error_reportingdisplay_errorslog_errorserror_log。详细信息见这里

    对于应用程序内层调用抛出的“异常”,一般可以在外层中使用try...catch来捕获并自定义处理过程。但对于“错误”(PHP运行时抛出或者应用程序使用trigger_error抛出的)或者对于-无法使用try...catch来捕获可能的异常/为了做到即使忘记捕获的异常也能得到自定义处理-的情况,该怎么办 …

    Tagged as : PHP Yii 笔记 总结
  3. Yii源码阅读笔记 - 自定义类自动加载

    前两天突然发现:之前的阅读笔记对于Yii应用中如何自动加载自定义类的问题没有解释。这里的自定义类是指非Yii框架本身的类。

    关于组件类的配置加载已在 Yii源码阅读笔记 - 组件集成 一文中做了较为详细的说明, 所以这里不再涉及。

    本文主要解释以下两点:

    1. Yii框架是如何找到请求对应的自定义控制器类?
    2. 在自定义控制器类中使用其他类(如Model类、或其他任意目录下文件中定义的类)时,Yii框架是如何自动加载的?

    Yii源码阅读笔记 - 应用模块化 一文中介绍类 CWebApplication 中的方法 createController , 该方法根据目标路由找到对应的控制器类文件并加载,方法中有行代码:

    $basePath=$owner->getControllerPath();
    

    这里的 getControllerPath 会返回当前应用或模块下的控制器类的存放目录,对应应用级与模块级,其实现有两处,其一是在类 CWebApplication 中:

    /**
     * @return string the directory that contains the controller classes. Defaults to 'protected/controllers'.
     */
    public function …
    Tagged as : PHP Yii 笔记 总结
  4. Slim源码阅读笔记

    以前读过 PHP - The Right Way 一文, 还翻译过其中的 The Baiscs 一节 (译文见 这里)。

    前两周读了 Modern PHP - New Features and Good Practices 一书 (读书笔记见这里), 甚是不错。

    这篇文档和这本书的作者都是Josh Lockhart, 他写了一个Web框架Slim,文档与书籍内容的精华都体现在这个框架中, 所以个人觉得这个框架值得一读。

    Slim的设计与实现都非常精简易懂,其对请求的主处理流程如下图所示:

    slim-process

    其中的核心概念包括:IoC容器、中间件、路由匹配等。

    IoC容器

    IoC,为Inversion of Control的缩写,中文翻译为“控制反转” - 是一种解决组件间依赖关系、配置和生命周期的设计模式,其最常见的实现方式为:依赖注入(DI)- 当系统 …

    Tagged as : PHP slim 笔记 总结
  5. Yii源码阅读笔记 - 日志组件

    使用

    Yii框架为开发者提供两个静态方法进行日志记录:

    Yii::log($message, $level, $category);
    Yii::trace($message, $category);
    

    两者的区别在于后者依赖于应用开启调试模式,即定义常量YII_DEBUG:

    defined('YII_DEBUG') or define('YII_DEBUG', true);
    

    Yii::log方法的调用需要指定message的level和category。category是格式为“xxx.yyy.zzz”的路径别名字符串,比如日志是在yii/framework/web/CController类中记录的,那么category为“system.web.CController”。level应为以下几种之一:

    • trace:Yii::trace方法即是使用的这个level。用于跟踪执行流
    • info:记录通用信息日志
    • profile:用于性能分析
    • warning:用于记录警告日志
    • error:用于记录重大错误日志

    要想日志真的输出到文件、邮件、web页面等地方 …

    Tagged as : PHP Yii 笔记 总结
  6. 又是一年

    又是一年,依照惯例,得写一篇总结和计划。当然计划更多的只是一种自我鼓励,现实总是一次又一次地证明“计划赶不上变化”。

    我的2014,可能用三个关键词就能概括:

    • 结婚
    • 换工作
    • 众成技术聚乐部

    结婚

    继13年领证,14年把婚礼也办了。由于两家离得远,婚礼也就分两次办。之间还补拍了婚纱照。虽然于我这些流程显得有点折腾,但重要的是大家都是很开心,也不希望老婆以后会有丁点遗憾。

    希望以后的日子总能努力让老婆开心幸福。

    换工作

    工作的时间并不长,本没想这么快换工作,何况我还是一个挺念旧的人。但还是那句话“计划赶不上变化”,不得已主动离职跳槽。

    对于目前的工作还比较满意,能做些自己喜欢做的事情,工作氛围也还不错。

    对于自己的要求就是踏踏实实做工作搞技术,不急不躁。

    众成技术聚乐部

    参加过各种大大小小的会议,总觉得水太多,但如果始终自己一个人蒙头研究技术,也有可能落得个“闭门造车”、“目光短浅”的下场,技术的“理”也是越辩越明,所以找了三五同学朋友搞起自己的技术沙龙, 名为“众成技术聚乐部”,之所以为“众成”,是希望 …

    Tagged as : 总结
  7. Yii源码阅读笔记 - 应用模块化

    概述

    Yii框架有个“模块(Module)”的概念,与“应用(Application)”类似,模块必须归属于一个父模块或者一个应用,模块不能单独部署,一个应用不一定要分模块。

    由此可以看到,Yii的“模块”和“应用”类似于Django框架中的“应用(App)”和“项目(Project)”。

    当一个应用的规模大到一定的程度 - 可能涉及多个团队来开发,就应该考虑分“模块”开发。“模块”通常对应应用的一个相对独立的功能。

    一个模块化的Yii框架应用的工程目录结构大致示例如下:

    Yii-WebApp-Modules

    上图所示项目有一个名为“forum”的模块,该模块下也有自己的componentscontrollersmodelsviewsextensions目录,与一个普通的/不分模块的Yii框架Web应用的项目结构非常相似。

    Yii框架模块化应用的所有模块默认都是放在protected/modules目录下,每个模块的内容又各自放在以模块ID(如forum …

    Tagged as : PHP Yii 笔记 总结
  8. Yii源码阅读笔记 - 缓存

    概述

    从之前的文章Yii源码阅读笔记 - 路由解析Yii源码阅读笔记 - Model层实现可以看到Yii框架对于解析好的路由规则数据表的schema都会根据条件尝试读写缓存 来提高应用性能。

    但缓存组件并非核心组件,需要额外的配置,默认ID为cache,如果不使用该ID,那么就得注意同时配置好框架中使用缓存的组件。

    恰当地使用缓存组件,能明显地提高应用的性能。

    针对不同的缓存后端(backend),Yii框架提供了多种缓存组件,如文件缓存(CFileCache)、Memcached缓存(CMemCache)、Redis缓存(CRedisCache)等。这些缓存组件(除CDummyCache外,CDummyCache并不是一个有效的缓存组件)均直接继承自抽象类CCache(见文件yii/framework/caching/CCache.php)。

    下面以使用Memcached缓存为例,分析Yii框架缓存组件的实现。

    分析

    CMemcache所在的整个继承树(CMemcache -> CCache -> CApplicationComponent …

    Tagged as : PHP Yii 笔记 总结

Page 1 / 3