2009年1月5日星期一

symfony学习笔记

环境配置:
  1. Apache2.2的httpd.conf文件中添加如下的虚拟主机设定:

    <VirtualHost *:80>
        ServerName myapp.example.com
        DocumentRoot "/home/steve/myproject/web"
        DirectoryIndex index.php
        Alias /sf /$sf_symfony_data_dir/web/sf
        <Directory "/$sf_symfony_data_dir/web/sf">
            AllowOverride All
            Allow from All
        </Directory>
        <Directory "/home/steve/myproject/web">
            AllowOverride All
            Allow from All
        </Directory>
    </VirtualHost>

  2. 在Eclipse中新建PHP项目。
  3. CMD窗口中进入新建项目的根目录。
  4. > symfony init-project myproject 初始化项目
  5. > symfony init-app myapp 初始化应用
  6. > symfony init-module myapp mymodule 初始化模块框架
  7. > symfony propel:build-sql 根据schema.yml和数据库配置自动生成数据库建表语句
  8. > symfony propel:insert-sql 根据schema.yml和数据库配置自动在DB中创建表
  9. > symfony propel:build-model 根据schema.yml自动生成数据模型

注意事项:
  1. 由于symfony有自动载入类的功能,每次在项目中添加类的时候需要用symfony clear-cache命令清空symfony缓存。
  2. symfony是大小写敏感的。
  3. 使用symfony模板的辅助函数有助于HTML页面代码的简洁并提高效率。
  4. 使用Javascript辅助函数 <?php use_helper('Javascript') ?\>
  5. 查询时使用Join来减少查询语句的数量。
  6. symfony核心和生成的php文件都不包含?>的关闭标签,因为关闭标签不是必须的,而且如果在关闭标签之后包含了空格会造成问题。
  7. 任何传递给Criteria 的值都会在整合入SQL 代码之前被转义,这能防止SQL 注入的风险。
  8. 在PHP5 下,对象是引用传递的, 所以要避免修改原始的,你必须克隆它:
    $criteria = clone $criteria;

常用代码:
  1. 用【self::】来调用当前类的静态方法。
  2. return sfView::ERROR;
    return 'MyResult';
    return sfView::NONE;
    return sfView::HEADER_ONLY;
    使用特殊模板时:$this->setTemplate('myCustomTemplate');
  3. $this->forward('otherModule', 'index');
    $this->redirect('otherModule/index');
    $this->redirect('http://www.google.com/');
    $this->forward404();
    $this->xxxIf(判断, xxx);
    $this->xxxUnless(判断, xxx);
    forward和redirect之后的代码不会被执行。
  4. public function preExecute() {} 在动作之前执行
    public function postExecute() {} 在动作之后执行
  5. $this->setFlash('attrib', $value);
    $value = $this->getFlash('attrib');
    在显示出下一页之后Flash属性就被删除了。

模板:
  1. 模板内置变量:
    $sf_user
    $sf_flash->has('attrib')
    $sf_flash->get('attrib')
  2. sfLoader::loadHelper($helpers) 在模板之外载入辅助函数

过滤器:
  1. isFirstCall() - 让第一个动作通过过滤器
  2. return $this->getController()->forward('mymodule', 'myAction'); 转发

0 コメント:

发表评论