对于Web开发者来说,处理HTML表单是最常见的任务(也是挑战)之一。Symfony2集成了Form组件以使得表单处理更为容易。在本章中,你将从头开始构建一个复杂的表单,并且学会表单库中大部分的重要功能。 Symfony2表单组件是一个独立库,它可以在Symfony2项目之外使用。更多详情参见Github中的Symfony2表单组件。
翻译 精选 2011-06-06 20:33:21
4146阅读
1点赞
1评论
安全是个两步过程,它的目的就是防止用户访问他/她无权访问的资源。 过程的第一步,安全系统识别用户是谁,要求该用户提供一些有序的验证。它被称为认证,它的意思是系统尝试发现你是谁。 一旦系统知道你是谁之后,下一步就是决定你是否可以访问指定的资源。过程的这一部分称为授权,它的意思是系统正在检查,看看你是否有执行某些动作的权利。
翻译 精选 2011-06-08 11:20:58
3051阅读
1点赞
2评论
所谓“国际化”是指抽象字符串的过程,它从你的应用程序中取出其它特定的语言环境部分并放入一个可以基于用户所在语言环境(如语言和国家)将其翻译和转换的层。对于文本,这意味着可以通过将文本(或“消息”)翻译成用户语言的函数来进行封装:
翻译 精选 2011-06-11 10:46:11
1779阅读
无论何时,你只要编写一行新的代码,你就有可能引入新的Bug。你应该使用自动测试,该教程将向你显示如何为你的应用程序编写单元测试和功能测试。 测试框架 Symfony2测试很大程序上依赖PHPUnit,它的最佳实践,和一些约定。这部分并不是PHPUnit本身的文档,但如果你还是不能理解的话,你可以阅读它优秀的文档 。 Symfony2使用PHPUnit 3.5.11或以上版本。 缺省的PHP
原创 2011-06-05 00:00:00
1902阅读
Bundle是一个有着良好定义结构的目录,它可以包含包括类、控制器和Web资源在内的任何东西。尽管Bundle非常灵活,但如果你想发布它的话,你还是应该遵循一些惯例:
翻译 精选 2011-06-11 20:51:21
2045阅读
对于任何严谨的web应用程序而言漂亮的URL是绝对必须的。这意味着要离开诸如index.php?article_id=57这样丑陋的URL,而出现类似/read/intro-to-symfony的URL。 拥有灵活性是非常重要的。什么?你需要将页面的URL从/blog改为/news?你需要跟踪大量的链接以便在发生变化时更新它们?如果你使用Symfony2的路由,这将是容易的。 Symfony2
原创 2011-06-02 00:00:00
2550阅读
2点赞
5评论
恭喜!通过Symfony2的学习,你将以你自己的方式 开发出更加高效、全面和流行的Web应用。Symfony2基于这样一个基础构建:它是一个开发工具,能够让你能够用你自己的方式 更加快捷地开发出更为健壮的应用程序。Symfony2集成了许多技术的优点,包括工具和概念,你将学习到大部分人多年来所努力的方向。换句话说,你不只是在学习Symfony2,你还学习Web基础、最佳开发实践以及在Symfony2内部或单独使用的那些新的、令人惊喜的PHP库。所以,请做好准备! 如上所述,本章将从说明Web开发的通用基础概念开始:HTTP协议,无论你的技术背景或首选编程语言是什么,本章内容对于所有人来说都是必读的。
翻译 精选 2011-05-29 00:00:00
7336阅读
3点赞
1评论
Symfony2中创建页面仅需要两步: 1、创建路由:当转入请求的URL匹配路由时路由定义你的页面URI(如/about)并指定Symfony2将要执行的控制器(PHP函数); 2、创建控制器:控制器是一个PHP函数,它接受转入的请求并将其转换成Symfony2的Response对象。 我们喜欢这样简单的实现,因为它符合Web的工作方式。每一个Web交互都是由HTTP请求开始,应用程序的任务就是简单地解释请求并返回相应的HTTP响应。Symfony2遵循这一原则,并为你提供工具以保证在你应用程序用户和复杂性增长时保持良好地组织性。
翻译 精选 2011-05-30 00:00:00
6190阅读
4点赞
4评论
如果你没有用过PHP框架、不熟悉MVC策略或者担心是Symfony2的炒作的话,那么本章适合你。不是告诉你使用Symfony2可以比使用纯PHP让你开发得更快更好,而是让你自己亲自去体会。 本章将让你用纯PHP写一个简单的应用程序,然后将其重构,使之更有条理。你将会穿越时间,了解为什么网站开发在过去几年中会演变成现在这样。 最后你将看到Symfony2是如何将你从烦杂的工作中解救出来,并让你收回对你代码的控制权。
翻译 精选 2011-05-30 00:00:00
5598阅读
4点赞
5评论
HttpKernel类是Symfony2的核心类,负责处理客户端的请求。它的主要目标是将Request对象“转换”成Response对象。 每个Symfony2的Kernel都实现HttpKernelInterface接口:
翻译 精选 2011-06-13 22:29:01
1860阅读
1点赞
6评论
看起来你想要知道Symfony2是如何工作的,以及要如何对它进行扩展。这让我非常高兴。本节深入Symfony2内部,对其进行说明。 如果你想了解Symfony2是如何工作的,或者你想扩展Symfony2的话,你只需要阅读本节。 Symfony2的代码由几个独立层构成,每层都构建在上一层之上。
翻译 精选 2011-06-13 17:01:14
1519阅读
现代的PHP应用程序是完全面向对象的。一个对象也许方便地发送电子邮件消息,而另一个对象也许让持久化信息到数据库。在你的应用程序中,你也许创建一个对象来管理你的产品库存、或者从第三方API中处理数据。问题的关键是现代应用程序可以做太多的事了,是到了将许多处理每个任务的对象组织起来的时候了。
翻译 精选 2011-06-11 23:38:07
2528阅读
1点赞
富Web应用程序的特征就是它们是动态的。无论你的应用程序多么有效率,每个请求总是比服务静态文件有着更多的开销。 对于大多数Web应用程序而言,这是好的。Symfony2非常快,除非你做的是很重量级的事,否则每个请求都会很快被返回,这不会给你的服务器太大压力。 但当你的站点增长之后,开销就变成了一个问题。对每个请求的正常处理应该只做一次,这正是缓存的目标所在。
翻译 精选 2011-06-09 23:20:54
1314阅读
面向对象代码在确保代码的扩展性方面已经走了很长的路。通过创建有着明确职责的类,你的代码可以变得更加灵活,并且开发者可以扩展它们的子类去修改它们的行为。但如果他想与其它那些也生成他们自己子类的开发者去分享他的改变时,代码继承已经没有意义。 考虑一下真实世界的例子,你想为你的项目提供一个插件系统。该插件可能添加一个方法,在该方法执行前或后做些事情,而不干扰其它插件。这并不是一个可以通过继承和多重继承(PHP可能做到)就可以容易解决的问题,它们有着自身的缺陷。
翻译 精选 2011-06-16 00:28:18
2454阅读
1点赞
控制器是PHP函数,通过它,你可以根据HTTP请求创建任务信息,并且构建和返回HTTP响应(作为Symfony2的Response对象)。响应可以是HTML页面、XML文档、序列化的JSON数组、图片、重定向、404错误甚至是你可以想到的一切。控制器中包含了你应用程序需要创建响应的抽象逻辑。 你的控制器可能是从请求中读取信息、导引数据库资源、发送电子邮件或者在用户Session中设置信息。但控制
原创 2011-06-01 00:00:00
2900阅读
1点赞
1评论
正如你所知,控制器处理响应传入Symfony2应用程序的请求。实际上,控制器将大部分重负载的工作带到其他地方以便代码可以被测试和重试。当控制器需要生在HTML、CSS或其它内容时,它将工作交给模板引擎。这本章,你将学习如何编写一个强大的模板,使之可以用于将内容返回给用户、电子邮件内容等。你将学习继承模板的快捷、智能的方式,以及如何重用模板代码。 模板 模板是简单的文本文件,可以生成任何基于文本
原创 2011-06-03 00:00:00
2754阅读
1点赞
如果你想学习模型和超级模型的最新技术,本章将无法对你有所帮助。但如果你仅仅只是想学习一个模型,你应用程序中元数据的层,那么请读读本章内容。本章所描述的模型用于MVC应用程序的构建。 MVC(模型-视图-控制)最初由Trygve Reenskaug在Smalltalk平台上提出的应用程序设计模式。MVC的主要思路就是将展现从数据中分离出来,把控制器从展现中分离出来。这种分离让应用程序的各个部分都只关注一个目标。控制器关注模型数据的改变,模型将其数据向视图开放,而视图则关注创建模型的展现(如HTML页面展示博客博文)。
翻译 精选 2011-05-31 00:00:00
4261阅读
Doctrine是一个基于PHP的对象关系映射(ORM),它构建在强大的数据库抽象层(DBAL)之上,透明地为PHP对象提供持久化。 你可以从官方文档中读到更多关于Doctrine ORM 的内容。
翻译 精选 2011-05-31 00:00:00
6128阅读
3点赞
12评论
Doctrine数据库抽象层(DBAL)是一个构建在PDO之上的抽象层,它为大多数流行的关系性数据库提供直接灵活的API。 你可以从官方文档中读到更多关于Doctrine DBAL 的内容。
翻译 精选 2011-05-31 00:00:00
4287阅读
  • 1
  • 2
  • 3
  • 4
  • 5