任氏有无轩改版已经很多次了,从最早的Symfony 1.x开始,在Symfony框架进入到2.x的时候重新改版了一次,最近的这次刚刚结束,也算是很大的一次。
根据我在Bitbucket的提交记录,3月12日开始第一次重新提交,4月22日完成最后一次的提交,历时40余天。但是,众所周知,我的开发是很断续的,平均下来每天投入的时间不会超过1个小时,所以这次改版的总耗时不超过40小时,也就是常规工作时间下一周的工作量——加班的话也就3天左右。
这次的改版牵涉面非常广。
(原文发布于2014年3月4日,原文链接Functional Testing in Symfony 2)
本文收录于[go4pro.org]
=====
基于《Symfony 2中的批量数据生成》,我们可以对页面进行有控制的功能测试。所谓“有控制”,意为在测试数据是受控产生的前提下,假定程序逻辑没有问题,那么结果应该是如我们所预期的那样受控。否则程序一定有问题。
(原文发布于2014年2月24日,原文链接:Data Fixtures in Symfony 2)
本文收录于[go4pro.org]
=======
本文介绍了在Symfony 2中使用Data Fixtures工具进行批量数据生成的方法。特别介绍了牵涉到1-M等主从表之间PK关联的数据的生成方法。
(原文发布于2014年1月13日,原文链接Integrating Polymer/Dart and Symfony – Part 1)
本文收录于[go4pro.org]
====
我继续进行着Dart的研究,并在该两部分的文章中讲述Dart和Symfony的结合。
这一部分,着重在异步数据获得,前台模板(Twig)于Dart/Polymer的整合。
(原文发布于2013年10月21日,原文链接Building a Web App With Symfony 2: Development)
本文收录于[go4pro.org]
=====
这是Symfony系列的第二篇。进一步介绍了路由,控制器,实体和仓库,模板。
(这是我为Sitepoint写的第一篇文章,原文发布于2013年10月14日,原文链接Building a Web App with Symfony 2: Bootstrapping)
本文收录于[go4pro.org]
=====
这是一个系列文章,总共有三篇,在第一篇中我详细介绍了设置,Bundle,MVC的概念,路由,数据库等方面。限于篇幅,很多东西没能完全展开。不过作为一个开始,我觉得我已经做得不错了。
“任氏有无轩”的后台中有一个统计是得出每天对书籍详情页面的访问数量,结果集很简单:一个日期,一个该天的访问次数。
在原生SQL下,这个并不复杂,如下的语句就可以完成: select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd。
但是这个语句稍作变动(将book_visit改为FQN的引用)在SF2中用常规的createQuery将不能执行,提示date函数不被支持。
解决这个问题有两种方法,一种是quick-and-dirty的纯原生SQL:
$q = $em->getConnection()->prepare('select count(v.bid) vc, date(from_unixtime(v.visitwhen+8*60*60)) vd from book_visit v group by vd order by vd');
$q->execute();
return $q->fetchAll();
这个方法简单明了,适合初学者使用。
作为SF2和Doctrine的推荐方法,我们要使用所谓的ResultSetMapping和createNativeQuery。
我们可以这样简单的理解,ResultSetpMapping提供了一种映射机制,将原生SQL返回的字段映射到结果集的域,从而使得Doctrine可以以此构造返回的结果集,然后执行SQL语句,并将结果返回。
应该说,即使你不使用createNativeQuery,而只是用createQuery,Doctrine也还是会隐含的做一个ResultSetMapping的,只是不用显式调用罢了。
代码如下:
public function getVisitCountByDay()
{
$em = $this->getEntityManager();
$rsm=new DoctrineORMQueryResultSetMapping;
$rsm->addScalarResult('vc', 'vc');
$rsm->addScalarResult('vd', 'vd');
$q=$em->createNativeQuery('select count(v.bid) vc, date(from_unixtime(v.visitwhen+15*60*60)) vd from book_visit v group by vd order by vd', $rsm);
$res=$q->getResult();
return $res;
}
这个调用中,最关键的其实是两个addScalarResult。 vc是标量结果很自然,但是vd为什么是标量结果?Doctrine的文档对此语焉不详。
我的理解是,一旦结果集中包含了一个标量结果(vc),那么所有其它结果也自然要变为标量结果。STOP。
本文收录于[go4pro.org]
在任氏有无轩站点中,有一个页面是用来给我自己看书籍详情页面的访问记录的,这个页面中需要做一些统计,比如:最近访问的是哪些书籍?访问量最大的是哪些?每天的访问量有多少?
前两个功能都很容易实现,我也以为第三个功能也很容易实现。