PHP

使用 PHP 和 Phalcon 作 daemon 进程

某些情况下,我们除了提供web界面给用户,还需要运行一些后台任务。这些任务可能是由用户触发的(比如用户提交了一个请求,而这种请求很特殊,例如从github克隆一个项目并执行构建,至少需要几分钟才能执行完成,这种情况不适合阻塞的方式让浏览器等待结果返回);也可能是一些常规性的系统任务(比如将日志进行归档,转移到统一的地方进行备份)。前者一般是引入消息队列,用户的请求只是增加了一条待构建的消息到消息队列,然后有一个专门的订阅者读取消息,调度分发执行这个任务。后者最简单的方式便是crontab,但缺点是每个机器需要单独进行设置,不易维护;当然也可以通过一个统一的调度器,分发任务到多个任务节点的方式来执行。…

        

Phalcon initialize 和 onConstruct在Controller和Model中的初始化

Phalcon 中在Controller和Model中的初始化方法容易比较混淆的有initialize() 和 onConstruct();

值得注意的是initialize() 在控制器的一次request只会执行一次, 在Model中也是只会执行一次.
因此在控制器Controller1中执行initialize()后, 后面的代码再次使用new Controller1(), 或者再调用new Controller2()是不会执行Controller1或Controller2中的initialize方法的.…

    

phalcon设置统一数据库表前缀

<?php
class BaseModel extends \Phalcon\Mvc\Model {
    public function getSource()
    {
        return 'v1'.strtolower(get_class($this));
    }
}

新建一个基础模型,然后所有的模型在该类上继承即可,原文中的小写函数书写错误,应该是strtolower

    

phalcon内置验证(非model)

Phalcon\Validation\Validator\Alnum
#只能包含字母、数字、字符

Phalcon\Validation\Validator\Alpha
#只能包含字母

Phalcon\Validation\Validator\Between
#介于二者之间,minimum<=x<=maximum
#示例
validator->add('name', new Between(array(
   'minimum' => 0,
   'maximum' => 100,
   'message' => 'The price must be between 0 and 100'
)));

Phalcon\Validation\Validator\Confirmation
#检测二个值必须一样
#示例
$validator->add('password', new Confirmation(array(
   'message' => 'Password doesn\'t match confirmation',