Tag: symfony 2

  • 任氏有无轩最新改版

    任氏有无轩改版已经很多次了,从最早的Symfony 1.x开始,在Symfony框架进入到2.x的时候重新改版了一次,最近的这次刚刚结束,也算是很大的一次。

    根据我在Bitbucket的提交记录,3月12日开始第一次重新提交,4月22日完成最后一次的提交,历时40余天。但是,众所周知,我的开发是很断续的,平均下来每天投入的时间不会超过1个小时,所以这次改版的总耗时不超过40小时,也就是常规工作时间下一周的工作量——加班的话也就3天左右。

    这次的改版牵涉面非常广。

    (more…)

  • 在Symfony 2中获取WordPress信息

    在我正在进行的任氏有无轩改版中,我希望在首页获得我的博客的一些信息,比如最新发布的五个帖子。

    我使用的博客后台是Wordpress,它提供了很好的编程接口,可以轻松地完成这个任务。而且Wordpress也提供了这些编程接口的说明。

    (more…)

  • Symfony 2中Twig模板的两个小技巧

    今天抓紧时间又更新了一下任氏有无轩的首页的改造。在我已经获得了我的博客的若干最新帖子的前提下,我需要在首页上显示其中的几个。 我要解决两个问题:

    1. 对帖子的内容进行过滤。
    2. 对过于长的帖子内容进行截断。

    (more…)

  • Symfony 2中的功能测试

    (原文发布于2014年3月4日,原文链接Functional Testing in Symfony 2

    本文收录于[go4pro.org]

    =====

    基于《Symfony 2中的批量数据生成》,我们可以对页面进行有控制的功能测试。所谓“有控制”,意为在测试数据是受控产生的前提下,假定程序逻辑没有问题,那么结果应该是如我们所预期的那样受控。否则程序一定有问题。

  • Symfony 2中的批量数据生成

    (原文发布于2014年2月24日,原文链接:Data Fixtures in Symfony 2

    本文收录于[go4pro.org]

    =======

    本文介绍了在Symfony 2中使用Data Fixtures工具进行批量数据生成的方法。特别介绍了牵涉到1-M等主从表之间PK关联的数据的生成方法。

  • Symfony和Dart的整合——第一部分

    (原文发布于2014年1月13日,原文链接Integrating Polymer/Dart and Symfony – Part 1

    本文收录于[go4pro.org]

    ====

    我继续进行着Dart的研究,并在该两部分的文章中讲述Dart和Symfony的结合。

    这一部分,着重在异步数据获得,前台模板(Twig)于Dart/Polymer的整合。

  • 用Symfony 2开发WEB应用:第二部分

    (原文发布于2013年10月21日,原文链接Building a Web App With Symfony 2: Development

    本文收录于[go4pro.org]

    =====

    这是Symfony系列的第二篇。进一步介绍了路由,控制器,实体和仓库,模板。

  • 用Symfony 2开发WEB应用:第一部分

    (这是我为Sitepoint写的第一篇文章,原文发布于2013年10月14日,原文链接Building a Web App with Symfony 2: Bootstrapping

    本文收录于[go4pro.org]

    =====

    这是一个系列文章,总共有三篇,在第一篇中我详细介绍了设置,Bundle,MVC的概念,路由,数据库等方面。限于篇幅,很多东西没能完全展开。不过作为一个开始,我觉得我已经做得不错了。

  • SF2中使用createNativeQuery和ResultSetMapping

    任氏有无轩”的后台中有一个统计是得出每天对书籍详情页面的访问数量,结果集很简单:一个日期,一个该天的访问次数。

    在原生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;
    }

    这个调用中,最关键的其实是两个addScalarResultvc是标量结果很自然,但是vd为什么是标量结果?Doctrine的文档对此语焉不详。

    我的理解是,一旦结果集中包含了一个标量结果(vc),那么所有其它结果也自然要变为标量结果。STOP。

    本文收录于[go4pro.org]

  • 在Symfony 2中使用原生SQL

    在任氏有无轩站点中,有一个页面是用来给我自己看书籍详情页面的访问记录的,这个页面中需要做一些统计,比如:最近访问的是哪些书籍?访问量最大的是哪些?每天的访问量有多少?

    前两个功能都很容易实现,我也以为第三个功能也很容易实现。

    (more…)