phalcon-入门篇4(log日志和session缓存)

phalcon-入门篇4(log日志和session缓存)

本教程基于phalcon2.0.9版本

前言

先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台

在新年来临之际!在这里祝关注和喜欢phalcon和phalapi的童鞋们,有你们的支持我才有动力鼓起勇气为大家带来这一系列教程,那么今天的教程将是在猴年前的最后一篇了,我们今天的目的是了解phalcon的log机制以及session的使用,那么让我们在新年的喜悦中来一同学习今天的内容吧!

注:笔者水平有限,说的不正确的地方希望大家多多指正,一同交流技术

附上:

喵了个咪的博客:http://w-blog.cn

教程代码库:http://git.oschina.net/wenzhenxi/Phalcon-tutorial

phalcon官网地址:https://phalconphp.com

phalcon中文社区:http://www.iphalcon.cn/

1. log日志

说道日志大家并不陌生,log一般用来记录PHP的debug或者是一些重要的报错信息来方便我们进行分析排除隐患,那phalcon的日志处理能给我们带来怎样的惊喜呢,我们继续往下看,

1.1 基本log

log目录我建议使用如下目录结构(比较方便定位你需要查找的那个月那天的记录):

我们照旧通过命名空间引入我们需要实例化的log类

use Phalcon\Logger\Adapter\File as FileAdapter;

我们在加入如下语句看下情况:

$logger = new FileAdapter("../Runtime/log/2016-2/20160203.log");  //初始化文件地址
$logger->log("This is a message");                                  //写入普通log
$logger->log("This is an error", \Phalcon\Logger::ERROR);         //写入error信息
$logger->error("This is another error");                          //于上一句同义

我们可能会遇到这样的报错:(是应为文件夹不存在可以检查文件夹是否创建)

failed to open stream: No such file or directory in

或许是这样的报错:(没有权限导致的(当然对windows来说不会有这种情况)Liunx赋予一下www权限就能解决了)

failed to open stream: Permission denied in

当我们解决了报错正常访问了通过之后我们可以看到在20160203.log文件中有如下一段话:

这里我们就已经成功的写入了log,到这里有人会问我那我到了2016年3月份了那文件又不存在了怎么办,其实我们一般会这样做,生成存放路径,然后验证路径文件夹是否存在,如果不存在就创建文件夹,这样就可以很好的避免这个问题,或者可以不去区分2016-2这个月份全部放在log中,因为.log的文件是自己生成的所以不用担心最后没的文件.

1.2 log事务

其实开始看log事务我也很莫名,在想log要事务干嘛,但是会过来结合phalcon的特点想了想就明白了,phalcon是高性能框架追求的是更快的速度,而如果每个地方执行log都要去写入到文件里面的话那么文件IO就会非常频繁,明显phalcon的开发者考虑到了这个问题.

官方的例子如下

// 开启事务
$logger->begin();

// 添加消息
$logger->alert("This is an alert");
$logger->error("This is another error");

//  保存消息到文件中
$logger->commit();

为了测试我们试着开始事务但是不结束看看会不会记录到log文件之中.测试结果当然是没有写入log任何内容,有需要使用log的童鞋这个确实不为是一个节省资源的方法

1.3 更多灵活的配置

到这里不得不说phalcon连一个log日志能做的这样的细致,难怪phalcon会在国外能火起来,下面会简单提及一下log的其余的功能大家可以自行尝试

  1. 使用多个处理程序进行日志记录(意思是日志写两份或多份)

     <?php
    
     use Phalcon\Logger;
     use Phalcon\Logger\Multiple as MultipleStream;
     use Phalcon\Logger\Adapter\File as FileAdapter;
     use Phalcon\Logger\Adapter\Stream as StreamAdapter;
    
     $logger = new MultipleStream();
    
     $logger->push(new FileAdapter('test.log'));
     $logger->push(new StreamAdapter('php://stdout'));
    
     $logger->log("This is a message");
     $logger->log("This is an error", Logger::ERROR);
     $logger->error("This is another error");
    
  1. 行格式化处理(这个是可以定义)

     use Phalcon\Logger\Formatter\Line as LineFormatter;
    
     // 修改日志格式
     $formatter = new LineFormatter("[%date%] - [%message%]");
     $logger->setFormatter($formatter);
     //这样配置获得log结果如下
     //[Wed, 03 Feb 16 11:20:13 +0800] - [This is another error]
    
  2. 系统log
     use Phalcon\Logger\Adapter\Syslog as SyslogAdapter;
    
     // 基本用法
     $logger = new SyslogAdapter(null);
    
     // Setting ident/mode/facility 参数设置
     $logger = new SyslogAdapter(
         "ident-name",
         array(
             'option'   => LOG_NDELAY,
             'facility' => LOG_MAIL
         )
     );
    
  3. FirePHP 日志记录器(FirePHP 是利用Firebug console栏输出调试信息方便程序)
     use Phalcon\Logger;
     use Phalcon\Logger\Adapter\Firephp as Firephp;
    
     $logger = new Firephp("");
     $logger->log("This is a message");
     $logger->log("This is an error", Logger::ERROR);
     $logger->error("This is another error");
    

2. session缓存

这样一个场景,用户登录了跳转到了首页,首页要显示用户的名称,这个地方你会怎么做,对第一时间我们就会想到用session,session是一个非常方便在各个控制器中传递数据的临时缓存,在phalcon也提供了session模块让我我们来体验一下把!

2.1 配置session

就和其他的配置一样session也需要在index.php中初始化代码如下

use Phalcon\Session\Adapter\Files as Session;

//实例化session并且开始 赋值给DI实例 方便在控制器中调用
$di->setShared('session', function () {
    $session = new Session();
    $session->start();
    return $session;
});

2.2 使用session

我们简单的修改一下控制器就能做简单的测试:

在IndexCpmtroller.php的indexAction方法中加入:

$this->session->set('username', 'miao');

在IndexCpmtroller.php的testAction方法中加入:

echo $this->session->get('username');

我们先访问http://phalcon.w-blog.cn/phalcon/Index/test发现并没有什么变化

在访问http://phalcon.w-blog.cn/phalcon/在紧接着访问http://phalcon.w-blog.cn/phalcon/Index/test发现已经打印出了miao

还可以清除session值

$this->session->remove("username");

当用户退出或者是整个使用结束我们还能关闭整个session:

$this->session->destroy();

phalcon还提供了不同应用隔离,会话袋,组件的持久数据等操作这里就不再提及,以上的session操作基本已经够用了,感兴趣的童鞋可以阅读官网文档

3. 小结

今天的教程到这里也就结束了,在这里希望大家能够在阅读每篇教程只能能够去尝试尝试,我局的只有亲身写过的代码才不会忘记,最后给大家摆个早年,祝大家猴年吉祥,新的一年工作顺利,技术都能上一个新台阶!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

时间: 2024-10-31 20:26:58

phalcon-入门篇4(log日志和session缓存)的相关文章

spring boot(一):入门篇

           构建微服务:Spring boot 入门篇   什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适).  

.NET Remoting程序开发入门篇

程序 一.Remoting基础 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式.从微软的产品角度来看,可以说Remoting就是DCOM的一种升级,它改善了很多功能,并极好的融合到.Net平台下.Microsoft? .NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架.这也正是我们使用Remoting的原因.为什么呢?在Windows操作系统中,是将应用程序分离为单独的进程.这个进程形成了应用程序代码和数据周围的一道边界.如果不采用进程间

【IPFS + 区块链 系列】 入门篇 - IPFS + Ethereum (上篇)-js-ipfs-api

孔壹学院:国内区块链职业教育引领品牌. 作者:黎跃春,孔壹学院创始人,区块链.高可用架构师 微信:liyc1215 区块链博客:http://liyuechun.org Ebay项目 基于以太坊Ethereum & IPFS的去中心化Ebay区块链项目详情链接 目录 1. 内容简介 2. IPFS-HTTP效果图 3. 实现步骤 3.1 安装create-react-app 3.2 React项目创建 3.3 运行React项目 3.4 浏览项目 3.5 安装ipfs-api 3.6 完成UI逻

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结)

phalapi-入门篇6(小技巧和浅谈API适用范围以及入门篇总结) 前言 先在这里感谢phalapi框架创始人@dogstar,为我们提供了这样一个优秀的开源框架. 本篇文章的目的在于把框架自带的一些好用,封装好的一些方便开发的类库简单的说一下,灵活使用可以提高开发效率,再就是因为在交流过程中有很多童鞋提出了一些关于什么样的项目怎么用API和web端怎么使用API这类的问题,我就我的理解把我的一些想法和大家交流一下,最后是对于入门篇做一下总结,以及对后面的一些教程做一下说明. 附上: 官网地址

Swift入门篇-swift简介

原文:Swift入门篇-swift简介   潜水博客园很多年,闲来无事,聊一下自己的经历,语文不好(如有什么错别字,请您在下评论)望您谅解,没有上过什么学的 在前期   ios入门篇 -hello Word(1) 文章中介绍我这半年准备写一些ios文章,一开始是准备写一些object-c方面的,但是最近苹果推出最近一门新的编程语言Swift.我也决定重新写一下Swift的方面的知识和苹果保持同步.   swift是一门什么语言了?   swift语言是苹果2014年6月3日正式推出一门新的的语言

Phalcon入门教程之模型CURD(2)

原文发表于:Phalcon入门教程之模型CURD(2) 上一篇 Phalcon入门教程之模型CURD(1) 中介绍了 Phalcon 模型的 insert 和 select 操作,本篇将介绍 update 和 delete 的用法.文中所用的示例代码皆沿用上一篇的数据表,这里不在赘述. 更新记录 Phalcon 模型更新记录的示例代码如下: $articleModel = new ArticlesModel(); //先调用 findFirst() 获取一条记录,返回值是当前模型对象 $arti

springboot:入门篇

什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适). 使用spring boot有什么好处 其实就是简单.快速.方便!平时如果我

HttpHandler HttpModule入门篇

HttpHandler HttpModule入门篇 ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览器中. 生命周期中涉及到几个非常重要的对象:HttpHandler,HttpModule,IHttpHandlerFactory,他们的执行(顺序)大致的执行过程是这样的:

Phalcon入门教程之模型

原文发表于: Phalcon入门教程之模型 Phalcon 提供了四种方式操作Mysql数据库:模型.PHQL.数据库抽象层以及原生SQL.不论何种方式,首先都需要在DI中注册 db 服务才能正常使用: DI注册db服务 // 文件路径:app/core/services.php $di -> setShared('db', function () use($config) { $dbconfig = $config -> database -> db; $dbconfig = $dbc