symfony 分页

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  public function executeShow(sfWebRequest $request)
  {
    $this->category = Doctrine_Core::getTable('Category')->find(array($request->getParameter('id')));
    $this->forward404Unless($this->category);
 
    $this->pager=new sfDoctrinePager('Content', 1);
    $q=Doctrine::getTable('Content')
    ->createQuery('c')
    ->where('c.category_id=?',array($this->category->getId()));
    $this->pager->setQuery($q);
    if($request->getParameter('page'))
    {
		$this->pager->setPage($request->getParameter('page'));
 
    }
    $this->pager->init();
  }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<ul class="list"><?php foreach($pager->getResults() as $record):?>
 
<li><?php echo $record->getTitle();?></li>
 
<?php endforeach;?>
<ul/>
<hr />
<div class="page">
<a href="<?php echo url_for('category/show?id='.$category->getId().'&page=1')?>">首页</a>
<a href="<?php echo url_for('category/show?id='.$category->getId().'&page='.$pager->getPreviousPage())?>">上一页</a>
<?php foreach ($pager->getLinks() as $page):?>
<?php if($pager->getPage()==$page):?>
<?php echo $page ?>
<?php else :?>
<a href="<?php echo url_for('category/show?id='.$category->getId().'&page='.$page)?>"><?php echo $page ?></a>
<?php endif;?>
<?php endforeach;?>
<a href="<?php echo url_for('category/show?id='.$category->getId().'&page='.$pager->getNextPage())?>">下一页</a>
 
<a href="<?php echo url_for('category/show?id='.$category->getId().'&page='.$pager->getLastPage())?>">末页</a>
</div>

symfony 测试数据的编写

symfony里面用到yaml貌似比较多,先来唠叨几句,这里关于yaml是个什么东东,yaml干什么用的,我就不说了。由于yaml格式要求相当的严格,因此这里顺便说说yaml 的一些注意事项:

  1. 注意缩进 ,
  2. 注意字段后面的空格 ,
  3. 注意对齐,
  4. 不要使用Tab来缩进,
  5. 不要在全角字符状态下输入分号与空格,

下面来一段演示代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#@file /data/fixtures/region.yml
# 我是注释,前面加个#号
#假如这里是地区信息的yaml文件
Region:
  NestedSet: true#分号后面跟空格,是Region Model的参数,缩进俩空格
  worldwide:#与NestedSet 同级,首字母需对齐与上级有俩空格的缩进
    name: 'Worldwide'
    children:#worldwide 有很多仔,用children
      Asia:
        name: 'Asia'#这里分号可以不要,但是在带有分号或者是其他冲突的数据时请加上
        children:
          Eastern_Asia:
            name: 'Eastern Asia'
            children:
              CN:
                name: 'China'
                code: 'CN'

实例中主要就是一个分级关系。上下级托行并缩进。

symfony 测试数据的编写


  1. 普通的测试数据

    如schema代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    Category:
      columns:
        name: string(50)
        decription: string(1000)
    Content:
      actAs:
        Timestampable: ~#不解释
      columns:
        title: string(250)
        content: clob
        view_count: integer
        reconmmend_level:
          type: enum
          values: [0,1,2]
          default: 2
        category_id: integer
      relations:#关系
        Category:
          local: category_id
          foreign: id
          foreignAlias: Contents     
    Comment:
      actAs:
        Timestampable: ~
      columns:
        body: clob
        user_id: integer
        content_id: integer
      relations:
        Content:
          local: content_id
          foreign: id
          foreignAlias: Comments

    那么测试数据应该格式如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    Category:
      c1:
        name: 新闻
        decription: 最新新闻
      c2:
        name: 咨询
        decription: 最新咨询
      c3:
        name: 软文
        decription: 软文频道
    Content:
       t1: #文章1,命名随便,但须不要要重复
        title: 新闻1
        content: 新闻1的内容
        view_count: 6
        reconmmend_level: 0
        Category: c1
        Comments: [m1,m2]#我有两条评论
       t2:#文章2
        title: 咨询1
        content: 咨询1的内容
        view_count: 8
        reconmmend_level: 1
        Category: c2
    Comment:
       m1:
        body: 很好很强大
       m2:
        body: 介个灰常棒,信不信由你,反正我是不信

    这个例子比较全面,涉及到表与表之间的关系,如一篇文章有多条评论.

  2. 下面来说下最常用的,加入了I18n
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Article:
      actAs:
        Timestampable: ~
        I18n:
          fields: [ title, body ] 
      columns:
        title: { type: string(255), notnull: true }
        body: { type: clob, notnull: true }
        author: { type: string(255), notnull: false }
  3. 那么代码测试数据代码应该是:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    Article:
      A1:#文章1
        author: me
        Translation:
          zh_CN:
            title: 标题1
            body: 文章1内容
          en_US:
            title: tiltle1
            body: content for tiltle1
     
      A2:#文章2
        author: 'kimo_zh'
        Translation:
          zh_CN:#简体中文,实际中我们可能会写出sc
            title: 标题2
            body: 文章2内容
          en_US:#英文,当然或许我们可能还会有其他的很多种语言,只需要按照这个格式去编写就OK了。
            title: tiltle2
            body: content for tiltle1

    最后说一下。因为插件不支持高亮,所以注释内容与代码的颜色没有区别,请注意区分。不明白请留言或者秋秋联系(IF YOU KNOW MY QQ NO.)

zend studio 整合aptana

zend studio 以及aptana 是干啥用的我这里就不多嘴了。

为啥要整合也轮不到我在这里胡说八道。so there we go。

zend studio 9 与aptana 3的办法


1、打开zend studio,点击菜单栏上面的help->install new software
Screen Shot 2012-04-07 at 5.36.59 PM.png

则跳出如下所示界面。

Screen Shot 2012-04-07 at 7.08.03 PM.png

2、安装aptana 3 在地址输入的地方直接输入:http://download.aptana.com/studio3/plugin/install 然后会出现界面如下:Screen Shot 2012-04-07 at 7.12.49 PM.png

这样我们直接下一步,下一步,同意协议,再下一步等待完成。当然这不是重点和我写这博文的目的。So you know ,继续往下。

zend studio 9 与aptana 3离线整合的办法


首先打开:http://download.aptana.com/studio3/plugin/install 你会发现链接自动跳转到一个xml文件,并提示你错误的类型,木有关系。我们在跳转完成后的地址后面加上index.html like this: http://d1iwq2e2xrohf.cloudfront.net/tools/studio/plugin/install/studio3/3.0.9.201202140953/index.html

按照官方手动安装方法来安装aptana 3

1.下载点击页面中以下按钮进行下载
Screen Shot 2012-04-07 at 7.27.13 PM.png

2.等待下载完成后打开zend studio 在菜单点击help->Install New Software如图:
Screen Shot 2012-04-07 at 5.36.59 PM.png3.点击界面中的add 按钮————>点击Archive…按钮 ,选中刚刚下载好的文件
Screen Shot 2012-04-07 at 5.41.05 PM.png

4.点击open打开文件 ,然后选中列表中的文件,点击下一步——>下一步——>接受协议——>下一步——>等待完成。

5.完成后重启zend studio ,选择菜单栏中的Zend Studio 中的 Preferences…(Note:Windows中不是这里,你懂得)
Screen Shot 2012-04-07 at 7.43.19 PM.png

6.在偏好设置里面你会发现Aptana 表示安装成功,这里我就不说配置的事儿了。Screen Shot 2012-04-07 at 5.48.27 PM.png

引用官方的话:

Manual Installation

  1. Save the above file to an easy-to-find location.
  2. Open Eclipse distribution, and go to Help -> Install New Software….
  3. Click the Add… button to open the Add Site window.
  4. Click the Archive… button, and select the file saved in step 1.
  5. Select the appropriate plugins to install, and click Next -> Next.
  6. Click the Finish button.

收工。洗澡去先。

symfony 之mod_rewrite配置

前段时间折腾zend framework ,然后访问目录默认并非网站的根目录,甚是郁闷;接下来symfony也是如此。假如我用的是虚拟主机,那么应用程序根目录肯定是入口,访问的时候不会再带一个web啥的跟到后面怪难看了。

默认的symfony的.htaccess文件如下:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On

  # uncomment the following line, if you are having trouble
  # getting no_script_name to work
  #RewriteBase /

  # we skip all files with .something
  #RewriteCond %{REQUEST_URI} \..+$
  #RewriteCond %{REQUEST_URI} !\.html$
  #RewriteRule .* – [L]

  # we check if the .html version is here (caching)
  RewriteRule ^$ index.html [QSA]
  RewriteRule ^([^.]+)$ $1.html [QSA]
  RewriteCond %{REQUEST_FILENAME} !-f

  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

这个放到了web目录下,于是要么就域名绑定到web目录,要么就绑定到根目录,然后跟一个http://host/web/这样地址来访问。现在我们把这个修改成:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On
 
  # we skip all files in /web
  RewriteCond %{REQUEST_URI} ^/web/
  RewriteRule .* – [L]
 
  # we rewrite all other files with .something to /web
  RewriteCond %{REQUEST_URI} \..+$
  RewriteCond %{REQUEST_URI} !\.html$
  RewriteRule ^(.*)$ /web/$1 [L]
 
  # !!! UNTESTED !!! ##################################
  # we check if the .html version is in /web (caching)
  RewriteRule ^$ /web/index.html [QSA]
  RewriteRule ^([^.]+)$ /web/$1.html [QSA]
  #####################################################
 
  # no, so we redirect to our front web controller
  RewriteRule ^(.*)$ /web/index.php [QSA,L]
 
</IfModule>

然后将其移动到网站根目录。直接访问index.php你会发现世界是多么的美好。睡觉!

symfony 环境配置

symfony 闲话


对于php我也就是能看懂一点代码,要我写一个留言板,里面加些杂七杂八的东西(如:ajax,json,jquery,缓存,模板,MVC)的话可能半年的时间不知道弄不弄的出来。因为这些东西只是看起来面熟,不知道是干啥用的。上帝,请原谅我的无知。最近闲来无事,到说听闻php框架可以不需要20分钟就能完成一个很牛X的东西,我就琢磨着,以前也没有做过啥玩意儿,出于好奇,开始了symfony的学习,我这人有一个缺点,就是做事有头无尾,开始是激情和调子都比较高,不过被他们折腾的死去活来的时候就有放弃的思想;这次我对自己提出点希望,就是希望能坚持到底。多嘴完毕,just do it.

php环境搭建for symfony


我原来曾经做过一篇文章(笔记) named: 最新php环境apache+php+mysql配置 当然现在不是最新的了。下面我不得不引用一段话。

最新apache下载地址:httpd-2.2.22-win32-x86-no_ssl.msi   |   更多版本点击此处

最新php下载地址:Installer 或者 Zip  |  更多版本请移驾到官方

最新mysql下载地址:http://dev.mysql.com/downloads/mysql/#downloads(注册need)

phpmyadmin下载地址:phpMyAdmin-3.3.9.2-all-languages.7z

安装我就不说了。装软件根据个人喜好,安装到对应的位置就OK了。我个人一般软件都不喜欢装到目录带空格的。这里貌似没有什么影响,就随便。

接下来是配置php的配置基本不需要我们管(intaller的安装方法)。

看看apache

修改配置apache

打开httpd.conf 

1、修改默认文件,找到DirectoryIndex 替换成如下的样子(根据个人需要)

<IfModule dir_module>
    DirectoryIndex index.html index.php default.php default.html

index.htm index.html
</IfModule>

2、修改网站目录 找到DocumentRoot 在双引号内输入你的网站路径如我的

DocumentRoot “F:/htdocs”

然后找到<Directory “Your apache path/htdocs”>

同样在双引号内输入你网站路径跟上面路径保持一致如我的

<Directory “F:/htdocs”>

这里略去很多英文字

</Directory>

3、修改php支持找到

#BEGIN PHP INSTALLER EDITS – REMOVE ONLY ON UNINSTALL
PHPIniDir “”
LoadModule php5_module “php5apache2_2.dll”
#END PHP INSTALLER EDITS – REMOVE ONLY ON UNINSTALL

修改为你的php所在的路径 如我的:

#BEGIN PHP INSTALLER EDITS – REMOVE ONLY ON UNINSTALL
PHPIniDir “D:/web/php”#php安装的目录
LoadModule php5_module “D:/web/php/php5apache2_2.dll”#确保这个破玩意儿路径是对的
#END PHP INSTALLER EDITS – REMOVE ONLY ON UNINSTALL

然后把LoadModule vhost_alias_module modules/mod_vhost_alias.so和

LoadModule rewrite_module modules/mod_rewrite.so以及Include conf/extra/httpd-vhosts.conf前面的#号去掉。

对应需要起用rewrite功能(也就是让.htaccess起作用 it is just my mean )

AllowOverride None
Order deny,allow
Deny from all

修改成

AllowOverride None

Order allow,deny
Allow from all

把apache重启放一边,配置mysql

双击MySQL安装目录下的bin目录下的MySQLInstanceConfig.exe,选择detailed configuration,下一步——>选择server machine ,下一步——>Non-Transactional Database Only——>下一步——>选择手动(manual setting),下一步——>默认,勾勾都打上,下一步——>选择手动(最后一项),选择utf8,下一步——>勾上,下一步,设置密码for root user of mysql,后面最后那个勾勾掉进入最后一步点击中间那个button,完成配置。

 

到目前测试下你的环境,就基本上可以满足symfony的需求了。后面说下新建项目的问题。

这里简单的说下项目的地址配置,去下载一个sf_sandbox(这个名字我灰常喜欢),把文件拷贝到你放网站项目的地方,然后我们apache配置使其能够正常访问。

在pathToApache\conf\extra 下有httpd-vhosts.conf 这么一个文件(也就是刚刚去掉#号的原因,因为我们现在需要用到它),用编辑器打开

我们在后面增加以下代码

Listen 81
NameVirtualHost *:81
<VirtualHost *:81>
    DocumentRoot “D:/htdocs/web”#这里表示你项目存放位置下的web目录如我的放到d:\htdocs下
    ServerName localhost:81
    #ErrorLog “logs/dummy-host.localhost-error.log”
    #CustomLog “logs/dummy-host.localhost-access.log” common
</VirtualHost>

这样再我们访问localhost:81是不是出现奇迹就在于你。完事了。因为时间问题所以弄的有点草率,有空会修改的更好些。谢谢阅读。

世界,你好!

欢迎使用 WordPress。这是系统自动生成的演示文章。编辑或者删除它,然后开始您的博客!