Development

Documentation/zh_CN/book/1.0/02-Exploring-Symfony-s-Code (diff)

You must first sign up to be able to contribute.

Changes between Version 3 and Version 4 of Documentation/zh_CN/book/1.0/02-Exploring-Symfony-s-Code

Show
Ignore:
Author:
Le.Jiang (IP: 218.80.121.212)
Timestamp:
03/13/07 17:11:56 (11 years ago)
Comment:

bug fix

Legend:

Unmodified
Added
Removed
Modified
  • Documentation/zh_CN/book/1.0/02-Exploring-Symfony-s-Code

    v3 v4  
    259259可以看到数据访问层的部分没有数据库引擎有关的函数,从而不依赖于特定的数据库。另外,建立数据库抽象曾的函数可以在很多其它的模型函数中重用。 
    260260 
    261 >**注意** 
     261>**NOTE** 
    262262>例2-6与例2-7的例子并不十分让人满意,要完成一个完整的数据库抽象层还有很多事情要做(通过数据库无关的查询生成器抽象SQL代码,把所有的函数放到一个类,等等)。但是这本书的目的不是手把手教你怎么写一个数据库抽象层,在第8章里你会看到symfony本身是如何把这些抽象做好的。 
    263263 
    312312所有前面的例子都是面向过程的。现代编程语言的面向对象特性能简化编程,因为对象可以封装逻辑,继承,以及提供干净的命名规则。 
    313313 
    314 在非面向对象的语言里面实现MVC架构会引起名称空间及代码重复的问题,代码会比较难以阅读。 
     314在非面向对象的语言里面实现MVC架构会引起命名空间及代码重复的问题,代码会比较难以阅读。 
    315315 
    316316开发者通过面向对象的方式可以通过视图对象,控制器对象,模型对象把之前例子里面的函数转换成方法。这是MVC架构必须的。 
    317317 
    318 >**提示** 
     318>**TIP** 
    319319>如果你想更详细的了解面向对象环境中的web应用程序设计模式,请阅读《Patterns of Enterprise Application Architecture》(作者:Martin Fowler, 出版 Addison-Wesley, ISBN: 0-32112-742-0)。这本书里面的代码用Java或者C#写的,PHP开发者也可以读一读。 
    320320 
    337337 
    338338首先,前端控制器是应用程序里所有的动作共用的。可以有多个控制器与多个布局,但是只需要一个前端控制器。前端控制器是纯MVC逻辑组件,你不必自己写一个,因为symfony会为你生成一个。 
    339 First of all, the front controller and the layout are common to all actions in an application. You can have multiple controllers and layouts, but you need only one of each. The front controller is pure MVC logic component, and you will never need to write a single one, because symfony will generate it for you. 
    340339 
    341340另外一个好消息是模型层的类也是根据数据结构自动生成的。这是由Propel库完成的,它有类的构架与代码生成功能。如果Propel找到外键或者日期字段,它会生成特殊的存取方法,这使得数据处理非常容易。另外,数据库抽象也是完全看不见的,它是由另外一个Creole组件处理的。所以如果你决定更换数据库引擎,你不必重写代码。你只要修改配置参数就可以了。 
    411410如你所见,所有的symfon类都有一个`sf`前缀,很多symfony模版中的核心变量也是这样。这样可以避免与你的类名与变量名重复,并使框架核心类更像是一家人,更好辨认。 
    412411 
    413 >**注意** 
     412>**NOTE** 
    414413>symfony的编码规范中,开头字母大写的驼峰字(UpperCamelCase)是变量名与类名的标准。只有两个例外:核心symfony类以小写的`sf`开头,模版里面的变量使用小写下划线的方式。 
    415414 
    429428模块包含动作,也就是说一个模块可以包含多个动作。例如,`shoppingCart`模块也许会有`add,`show`与`update`等动作。一般来说,动作的名字是动词。动作就好像一般的web应用程序的页面一样,尽管两个动作可能显示同样的页面(例如,在给文章留言后还会把文章显示出来)。 
    430429 
    431 >**提示** 
     430>**TIP** 
    432431>如果你认为这么做对于一个刚开始的项目来说层次太多了,你可以很方便的把所有的动作集中到一个模块里,这样文件结构就简单了。当应用程序越来越复杂,你就需要把这些动作分开放到不同的模块。本书第1章提到,通过重写代码来改善结构与可读性(同样保留功能)被称为重构,当你应用RAD原则的时候经常需要这么做。 
    433432 
    524523`templates/` | 包含应用程序的全局模版--所有模块公用的模版。默认情况,这个目录会有一个`layout.php`文件,这是模块模版默认主布局。 
    525524 
    526 >**注意** 
     525>**NOTE** 
    527526>新应用程序的`i18n/`, `lib/`, 与 `modules/` 目录是空的。 
    528527 
    559558`validate/`  | 用户存放表单验证配置信息(详见第10章)。 
    560559 
    561 >**注意** 
     560>**NOTE** 
    562561>新模块的`config/`, `lib/`, 与`validate/` 目录是空的 
    563562 
    583582`uploads/` | 只能存放用户上传的文件。虽然这个目录通常会存放图片我们还是把这个目录与图片目录分开,这样同步开发服务器与正式服务器的时候不会影响上传的文件。 
    584583 
    585 >**注意** 
     584>**NOTE** 
    586585>虽然强烈建议维持默认的目录结构,你还是可以作出修改,例如一个项目要运行在不同的目录结构与命名规则的服务器上。修改目录结构详见第19章。 
    587586 
    635634     => default 
    636635 
    637 参数holder还支持名称空间。如果你给setter或者getter指定第三个参数,这个参数代表名称空间,那么这个参数就只会在这个名称空间里定义或者取值。见例2-18 
    638  
    639 例 2-18 - `sfResponse` 参数 Holder 的名称空间 
     636参数holder还支持命名空间。如果你给setter或者getter指定第三个参数,这个参数代表命名空间,那么这个参数就只会在这个命名空间里定义或者取值。见例2-18 
     637 
     638例 2-18 - `sfResponse` 参数 Holder 的命名空间 
    640639 
    641640    [php] 
    701700所以你可以把所有的类放在lib目录,你再也不必包含他们。所以symfony项目通常没有`include`或者`require`语句。 
    702701 
    703 >**注意** 
     702>**NOTE** 
    704703>为了提高效率,第一次symfony自动在一个目录列表(在配置文件里面定义)里寻找。然后symfony把这些目录里的所有类和文件的关联存放在一个PHP数组里。这样,以后的自动载入就不需要扫描整个目录了。所以你每次在项目里面增加一个类都需要通过`symfony clear-cache`命令清空symfony缓存。缓存详见第12章,自动载入配置文件详见第19章。 
    705704