415 12
发新话题
打印

Symfony简介

PEAR

PEAR是"一个PHP可重用代码的框架和发布系统"。PEAR可以下载、安装、升级及删除PHP脚本。使用PEAR包的时候,不用为了脚本的位置或者怎么找到他们而担心,扩展命令行借口(CLI)也很容易。

PEAR是一个由社区推动的PHP项目,官方发布的PHP中就包含了PEAR。

提示 PEAR网站, http://pear.php.net/, 有PEAR文档与分类的PEAR包下载。

PEAR是最专业的安装PHP库的方法。建议使用PEAR来管理一个由多个项目共用的symfony框架。Symfony的插件(plug-ins)是一种有特殊设置的PEAR包。Symfony本身也可以通过PEAR安装。

使用symfony并不需要懂PEAR命令的语法。你只要知道PEAR的用途还有确定它已经安装好就行了。你可以通过在你的电脑的命令行(CLI)下输入下面面的命令来检查PEAR是否安装:
> pear info pear

这个命令会返回安装在你的电脑上的PEAR的版本。

Symfony项目有自己的PEAR仓库(或频道)。仓库功能只有PEAR 1.4.0以上版本才支持,所以如果你的版本比较老就需要升级。升级PEAR,只要在命令行输入下面的命令就可以了:
> pear upgrade PEAR

关于PEAR的更多信息请关注本站PEAR专区:http://bbs.phpres.com/forum-21-1.html

TOP

对象关系映射(ORM)

数据库是关系型数据库。 PHP5和Symfony是面向对象的。 为了用面向对象的方法访问数据库, 必须用一个接口来表示对象之间的逻辑关系。 这个接口就叫作对象关系映射或者ORM。

ORM是由对象组成,用来访问数据和保持事务关系。 An ORM is made up of objects that give access to data and keep business rules within themselves.

对象/关系的抽象层的其中一个优点是可以不用直接去访问数据库。 它会使用经过优化的模型对象来访问当前的数据库。

这就意味着在项目中期换一套数据库将是很简单的事情。想象一下当你必须为程序写一个原型的时候,客户并不能确定哪种数据库最适合他们。 你可以先使用SQLite来开发程序, 当客户决定使用MySQL, PostgreSQL或者Oracle的时候,我们只要在配置文件中稍作修改就可以正常工作了。

抽象层封装了数据逻辑。 其他程序并不需要了解SQL的查询语句,却依旧能轻松的访问数据库。 那些对数据库开发者专家也很清楚的知道该做些什么。

使用对象而非记录, 用类而非表,还有其他益处: 你能为你的表增加一些新的存取方法。 例如, 你有一个名叫Client的表,有两个字段,分别是FisrstName和LastName, 你也许想直接获得一个完整的姓名。 在面向对象中, 为一个Client类添加一个访问方法,就像这样:
[php]
public function getName()
{
  return $this->getFirstName.' '.$this->getLastName();
}

所有重复数据访问功能和数据的业务逻辑都可以在对象中维护。 例如,有一个用来生成对象的ShoppingCart类。 我们在结帐时想获得一个总价, 你可以加一个 getTotal() 方法,就像这样:
[php]
public function getTotal()
{
  $total = 0;
  foreach ($this->getItems() as $item)
  {
    $total += $item->getPrice() * $item->getQuantity();
  }
  return $total;
}

就这好了,想象一下要写多长的SQL语句才能完成同样的事情!

Propel,另一个开源项目,是当前最好的基于PHP5的对象/关系抽象层。 Symfony框架无缝集成了Propel, 所以本书大多数的数据处理描述都使用了Propel的语法。 本书将描述如何使用Propel对象, 但是更详细的资料可以参考Propel的网站(http://propel.phpdb.org/trac/)。

TOP

快速应用程序开发 (RAD)

开发网页程序是一件单调乏味的,慢速的事情。 例如常规软件开发生存周期(like the one proposed by the Rational Unified Process, for instance),要等到有完整的需求才能开始开发, 绘制大量的UML图, 产生了大量的正式文档之前准备阶段的文档(preliminary documentation?)。 这就是一般的开发步速,缺少通用性的程序语言(在能正式看到程序可以用之前不知道要多少次的建立,编译,重起), 最主要的就是客户不会经常改变他们的主意。 (Programming web applications has long been a tedious and slow job. Following the usual software engineering life cycles (like the one proposed by the Rational Unified Process, for instance), the development of web applications could not start before a complete set of requirements was written, a lot of Unified Modeling Language (UML) diagrams were drawn, and tons of preliminary documentation were produced. This was due to the general speed of development, to the lack of versatility of programming languages (you had to build, compile, restart, and who knows what else before actually seeing your program run), and most of all, to the fact that clients were quite reasonable and didn't change their minds constantly.)

今天,商业节奏更快了,客户总是倾向于在制作项目中经常改变他们的需求。 当然, 他们期望开发组能接受他们的需求并且快速更改应用程序的架构。 幸运的是, 使用脚本语言就像Perl和PHP会更容易的去实现这些,例如快速应用程序开发(RAD)和敏捷程序开发。

尽快去建立一个工作原型以便客户可以审阅并且提出问题是一个好方法。如此周而复始,在较短的开发周期发布新的功能(releasing increasingly feature-rich versions in short development cycles)。

The consequences for the developer are numerous。 一个开发者不需要去想在未来如何实现一个新功能。 用最简单的方法去实现需要的功能。 这就是KISS原则的一个很好体现: Keep It Simple, Stupid.

当需求变化或者功能增加的时候, 有时需要重写代码。 这就叫做重构, 这经常发生在网页应用程序开发中。代码会更根据需要改变存放位置。把重复的地方合并到一个地方,这就是Don't Repeat Yourself (DRY)原则。

当程序改变后要去确保依旧能够运行, 这需要一系列的自动测试来完成。 如果写得好的话, 单元测试将是在重构代码后检查的一个好的方法。 一些开发方法学(development methodologies )甚至于规定在编写代码前先写测试--这就使称之为测试驱动开发test-driven development (TDD)。

NOTE 关于敏捷开发还有其一些它原则和好习惯。 一个敏捷开发理论中最有效率的方法叫做极限开发语言(Extreme Programming)(简称XP),XP教材会教你如何去快速而有效的去开发一个程序。 A good starting place is the XP series books by Kent Beck (Addison-Wesley).

Symfony is the perfect tool for RAD. As a matter of fact, the framework was built by a web agency applying the RAD principle for its own projects. This means that learning to use symfony is not about learning a new language, but more about applying the right reflexes and the best judgment in order to build applications in a more effective way.

The symfony project website proposes a step-by-step tutorial illustrating the development of an application in an agile way. It is called askeet (http://www.symfony-project.com/askeet), and is recommended reading for those who want to learn more about agile development.

TOP

YAML

来自YAML官方网站 (http://www.yaml.org/) 的定义: YAML是一种直观的能够被电脑识别的的数据数据序列化格式,它并且容易被人类阅读,容易与脚本语言交互的。换种说法,YAML是一种非常简单的类似于XML的数据描述语言,语法比XML简单很多。他在描述可以被转化成数组或者hash的数据是非常有用,例如:
[php]
$house = array(
  'family' => array(
    'name'     => 'Doe',
    'parents'  => array('John', 'Jane'),
    'children' => array('Paul', 'Mark', 'Simone')
  ),
  'address' => array(
    'number'   => 34,
    'street'   => 'Main Street',
    'city'     => 'Nowheretown',
    'zipcode'  => '12345'
  )
);

解析这个YAML将会自动创建下面的PHP数组:
house:
  family:
    name:     Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345

在YAML里面,结构通过缩进来表示,连续的项目通过减号"-"来表示,map结构里面的key/value对用冒号":"来分隔。YAML也有用来描述好几行相同结构的数据的缩写语法,数组用'[]'包括起来,hash用'{}'来包括。因此,前面的这个YAML可以缩写成这样:

house:
  family: { name: Doe, parents: [John, Jane], children: [Paul, Mark, Simone] }
  address: { number: 34, street: Main Street, city: Nowheretown, zipcode: 12345 }

TOP

YAML是"Yet Another Markup Language(另一种标记语言)"的缩写,读音"yamel",或者"雅梅尔"。这种格式大约是2001年出现的,目前为止已经有多种语言的YAML解析器。

     提示 YAML格式的详细规格可以在YAML官方网站http://www.yaml.org/找到。

     如你所见,写YAML要比XML快得多(不需要关闭标签或者引号),并且比'.ini'文件功能更强(ini文件不支持层次)。所以symfony选择YAML作为配置信息的首选格式。在本书你会看到很多YAML文件,不过它很直观你用不着更深入地研究YAML。
总结

      Symfony是一个PHP 5 web应用程序开发框架。他在PHP语言的基础上增加了一个新层,为加速开发复杂的web应用程序提供了工具。本书全面介绍symfony的使用,你只需要熟悉并且理解现代编程的基本概念 -- 面向对象程序设计(OOP)、对象关系映射(ORM)还有快速程序开发(RAD)。唯一需要的技术背景是PHP 5的知识。

     <想要学习更多关于的知识,请关注PHP开发资源网(http://bbs.phpres.com)的更新>

TOP

 415 12
发新话题