Tag: Symfony

  • 在Symfony 2中使用原生SQL

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

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

    (more…)

  • 用Symfony 2重建“任氏有无轩”——第一天

    Symfony是我最喜欢用的PHP框架,没有之一。我从2009年1月开始用Symfony 1.2(系列教程第一篇:Going for Symfony | 第一天)重建我的“任氏有无轩”,然后在2011年3月用Symfony 1.4.9(系列教程第一篇:重构狗屎皮:第一天)重建“狗屎皮”,一直就没有离开过Symfony这个环境。

    (more…)

  • 在SF2中使用第三方库

    著名的PHP框架Symfony 2已经出到RC4,距离正式版本只有一步之遥。我也赶时髦安装了一下,用来改造我的任氏有无轩

    SF2完全基于PHP 5.3开发,要求运行时的支持环境也是PHP5.3以上。目前我的虚拟主机还不支持PHP 5.3,不过个人认为应该快了。所以使用SF2改造我的站点也算是未雨绸缪吧。

    SF2 RC4的标准版本安装已经很完整了,激活了很多第三方库,例如Monolog库,Doctrine库等。但是在实际使用中,我们一般还是会用到更多的库,比如我现在的计划中就要使用Snoopy这个浏览器模拟库,用它来抓取我的饭否话唠记录。

    (more…)

  • 重构狗屎皮:第六天

    在第六天,重构后的狗屎皮终于上线了:http://www.go4pro.org 。总结一下,目前新版的狗屎皮的架构是这样的:

    第一大功能模块是后台的机器人抓取模块,由猛禽开发,使用的语言是Python。机器人负责遍历所有的文章来源的RSS并取出新的文章并存入数据库。

    第二大功能模块是前台,由TR开发,使用的语言是PHP+Symfony 1.4。这个模块用来显示数据库里的文章等。

    (more…)

  • 重构狗屎皮:第五天

    继重构狗屎皮第四天后,我要开始非常重要的一个环节:狗屎皮后台的管理。而后台管理必然牵涉到用户登录。

    在Symfony框架中,这两个功能都可以简单的实施。 首先是后台模块的创建,基本上需要如下几个命令:

    (more…)

  • 重构狗屎皮:第四天

    今天进入狗屎皮重构的第四天。有件事要纪念一下:从今天晚间开始,我的虚拟主机上站点:BSpMq.com以及rsywx.net无法正常访问,必须翻墙。我实在不能明白的是,这样一个纯粹是打P扯谈的站点,一个以藏书、温和时事评论的站点怎么会被封?GFW真的是不可理喻了!

    进入妓术专题。

    今天进入狗屎皮重构的第四天。我主要解决了分页的问题。

    (more…)

  • 重构狗屎皮:第三天

    今天进入了狗屎皮重构的第三天。今天要解决一个很关键的问题:如何让用户贴出评论?

    先看界面:

    ui-master-detail

    这时一个标准的主从表界面:帖子内容、已经有了的评论内容再加上一个表单方便用户提交评论。

    我本来认为要完成用户提交评论,在Symfony下是很简单的——简单到你可以不用写任何额外的代码,但实际情况并不如此。

    主要的一些修改如下。

    首先,要修改article的action.class.php文件中的executeShow函数:

    class articleActions extends sfActions
    {
        public function executeShow(sfWebRequest $request)
        {
            $article=$this->getRoute()->getObject();
            $this->article = $article;
            $this->comments=Doctrine_Core::getTable('g4pcomment')->getComments($article->getId());
            $this->form=new G4pCommentForm();
        }
        ......
    }

    上述代码中必须人肉创建了一个comment的表单,并传递到模板中进行进一步处理。

    在showSuccess.php模板中,通过include_partial来显示comment表单:

    include_partial('comment/form', array('form'=>$form, 'article_id'=>$article->getId()));

    注意,我还额外传递了一个article_id参数进去,这是为了后续的处理。

    修改comment表单文件如下,让它带一个article_id的参数:

    <?php echo form_tag_for($form, '@comment') ?>

    最后,修改comment的create以及processForm函数:

    public function executeCreate(sfWebRequest $request)
        {
            $this->forward404Unless($request->isMethod(sfRequest::POST));
            $aid=$request->getParameter('aid');
            $nc=new G4pComment();
            $nc->set('article_id', $aid);
            $nc->set('created_at', date('Y-m-d H:i:s'));
            $this->form = new G4pCommentForm($nc);
            $this->processForm($request, $this->form);
            //$this->setTemplate('article/show');
        }
    
    protected function processForm(sfWebRequest $request, sfForm $form)
        {
            $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
            if ($form->isValid())
            {
                $comment = $form->save();
                $article=$comment->getG4pArticle();
                //var_dump($article);
                $this->redirect($this->generateUrl('show_article', array('id'=>$article->getId(), 'title_slug'=>$article->getTitleSlug())));
            }
        }

    在executeCreate函数中,设置了一个comment的外键article_id(从前一个页面传递过来),设置了comment创建的时间。

    在processForm函数中,需要修改一下处理完毕后的重定向,回到原来的帖子的页面,显示帖子、评论等。

    最后,我不得不说两句。我认为这个要求是几乎所有WEB程序都会用到的,但是我提问到Symfony的官方论坛后三天没有人回答!最后还是靠自己解决了问题……

    (本文收录于[go4pro.org])

  • 重构狗屎皮:第二天

    今天进入狗屎皮重构的第二天。实践证明,这第二天,确实是非常2的一天。

    首先,Symfony推出了一个新框架:Symfony 2。具体介绍见:http://www.symfony.com/。我刚搭建了Symfony 1.4.9的环境,实在不想在一个全新的框架上进行开发——虽然如此做对熟悉一个东西是很有好处的。

    (more…)

  • 重构狗屎皮:第一天

    今天开始重构狗屎皮。

    基本的框架是:后台机器人采用pMq编写的机器人进行采集,这个机器人是用Python编写的;由于我对Python以及基于Python的框架(我们之前用的是TG2)不是很熟悉,所以决定重新用Symofny改写。

    今天是第一天。主要是进行数据库的构建。

    解决了一个“小”问题,就是:Symfony在缺省时数据库所有文本字段采用的是拉丁编码,必须设置一下强迫其采用UTF8编码,代码如下:

    # File: config/database.yml
    all:
        doctrine:
            class: sfDoctrineDatabase
            param:
                dsn: mysql:host=localhost;dbname=go4pro
                username: root
                password:
                attributes:
                    default_table_charset: utf8
                    default_table_collate: utf8_general_ci

    最后三行紧要。

    今天还对样本数据进行了一些编写。用Symfony内置的机制进行数据填充还是很快很快的。

    比如我们可以这样编写一个comment.yml文件:

    # File data/fixtures/comment.yml
    G4pComment:
        first_comment:
            G4pArticle: first
            username: Dummy
            content: 好文章!
    <?php for($i=1;$i<=15;$i++): ??>;
        comment_<?php echo $i ??>:
            G4pArticle: first
            username: 访客<?php echo $i.n; ??>
            content: 我是路人<?php echo $i.n; ??>
    <?php endfor; ??>

    这样就可以一下子产生1+15个数据。YML文件是非常讲究格式的,必须注意书写时的缩进。

  • “任氏有无轩”改版完毕

    春节长假转瞬即逝,明天就要回复上班了…… 趁着放假的这几天,重新改版了一下我的任氏有无轩站点。这次的改版主要有两个重要的改动:

    • Symfony的版本从1.2升级到了1.4;
    • 将数据库ORM从原来的Propel改到了Doctrine

    另外还做了一些小的修改,主要是URI的美化。 收获不小。改天再慢慢写出。