第四章——页面创建的基础知识
奇怪的是,第一个教程,程序员遵循当学习一门新语言或框架是一个显示“Hello, world !”在屏幕上。真奇怪认为电脑可以迎接全世界的东西,因为每次在人工智能领域迄今为止导致可怜的会话能力。但symob娱乐下载fony并不比其他项目更傻,证据是,您可以创建一个页面,说:“你好,<你的名字>
”。
本章将教您如何创建一个模块,这是一个结构元素组页面。您还将学习如何创建一个页面,这是分为一个动作和一个模板,因为MVC模式。链接和表单的基本web交互;您将看到如何插入在模板和处理他们的行动。
创建一个模块框架
第二章解释说,symfony组页面模块。ob娱乐下载在创建页面之前,您需要创建一个模块,它最初是一个空壳一个symfony可以识别的文件结构。ob娱乐下载
symfob娱乐下载ony命令行自动的创建模块。你只需要调用init-module
任务与应用程序名称和模块名称作为参数。在前面的章节中,您创建了一个myapp
应用程序。添加一个mymodule里
这个应用程序模块,输入以下命令:
> cd ~ / myproject ob娱乐下载> symfony init-module myapp mymodule里> > dir + ~ / myproject /应用程序/ myapp /模块/ mymodule里> > dir + ~ / myproject /应用程序/ myapp /模块/ mymodule里/行动> >文件+ ~ / myproject /应用程序/ myapp /模块/ mymodule里/行动/ actions.class。php > > dir + ~ / myproject /应用程序/ myapp /模块/ mymodule里/配置> > dir + ~ / myproject /应用程序/ myapp /模块/ mymodule里/ lib > > dir + ~ / myproject /应用程序/ myapp /模块/ mymodule里/模板> >文件+ ~ / myproject /应用程序/ myapp /模块/ mymodule里/模板/ indexSuccess。php > > dir + ~ / myproject /应用程序/ myapp /模块/ mymodule里/验证> >文件+ ~ / myproject /测试/功能/ myapp / mymoduleActionsTest。php > >标记~ / myproject /测试/功能/ myapp / mymoduleActionsTest。php > >标记~ / myproject /应用程序/ myapp /模块/ mymodule里/行动/ actions.class。php > >标记~ / myproject /应用程序/ myapp /模块/ mymodule里/模板/ indexSuccess.php
除了行为/
,配置/
,lib /
,模板/
,验证/
目录,这个命令创建只有三个文件。测试/文件夹中的一个单元测试的担忧,和你不需要打扰,直到第15章。的actions.class.php
(如清单4所示)远期祝贺页面默认模块。的模板/ indexSuccess.php
文件是空的。
清单4 - 1 -默认生成的行动,行动/ actions.class.php
< ? php类mymoduleActions扩展sfActions{公共函数executeIndex(){这个美元- >向前(“默认”,“模块”);}}
请注意
如果你看一个实际的actions.class.php
文件,你会发现更多比这几行,包括大量的评论。这是因为symfony建议使用Pob娱乐下载HP评论记录您的项目并准备每个类文件兼容phpDocumentor工具(< a href ="http://www.phpdoc.org/">http://www.phpdoc.org/)。
对于每一个新模块,symfony创建一个默ob娱乐下载认的指数
行动。它是由一个动作方法executeIndex
和一个模板文件indexSuccess.php
。的含义执行
前缀和成功
后缀将解释在6和7章,分别。与此同时,你可以考虑这种命名约定。你可以看到相应的页面(图4 - 1)中复制通过浏览以下网址:
http://localhost/myapp_dev.php/mymodule/index
默认的指数
行动将不会使用在这一章,你可以删除executeIndex ()
方法从actions.class.php
文件,并删除indexSuccess.php
文件从模板/
目录中。
请注意
ob娱乐下载Symfony提供了其他方法比命令行启动模块。其中一个是自己创建的目录和文件。在许多情况下,行动和模板的模块是用来操作数据的表。作为必要的代码来创建、检索、更新和删除记录从表通常是相同的,symfony提供了一种机制称为脚手架为您生成此代码。ob娱乐下载请参考第14章关于这种技术的更多信息。
图4 - 1 -默认生成的索引页
添加一个页面
在syob娱乐下载mfony中,背后的逻辑页面存储在行动,和表示模板。页面没有逻辑(仍然)需要一个空的行动。
添加一个动作
“Hello, world !”的页面将通过访问myAction
行动。要创建它,只是添加一个executeMyAction
方法mymoduleActions
类,如清单4 - 2所示。
清单4 - 2 -添加一个动作就像添加一个Action类的执行方法
< ? php类mymoduleActions扩展sfActions{公共函数executeMyAction(){}}
动作方法的名字总是执行“Xxx”()
,第二部分的名称的动作名称第一个字母大写。
现在,如果你请求以下网址:
http://localhost/myapp_dev.php/mymodule/myAction
ob娱乐下载symfony会抱怨myActionSuccess.php
模板是失踪。这是正常的;在syob娱乐下载mfony中,页面总是由一个动作和一个模板。
谨慎
url(不是域名)是区分大小写的,所以是symfony(尽管PHP中的方法名称不区分大小写)。ob娱乐下载这意味着,如果你添加一个executemyaction ()
方法,或一个executeMyaction ()
,然后你的电话myAction
浏览器,symfony会返回一个40ob娱乐下载4错误。
侧边栏
url的一部分响应
ob娱乐下载Symfony包含一个路由系统,允许你有一个完整的分离实际动作名称和URL的形式需要调用它。这允许自定义格式的URL,就好像它是反应的一部分。你不再受限于请求的文件结构和参数;一个动作的URL可以看起来像你想要的词。例如,调用一个模块称为文章的索引操作通常是这样的:
http://localhost/myapp_dev.php/article/index?id=123
这个URL从数据库检索给定的文章。在这个例子中,它检索一篇文章(id = 123
)在欧洲部分,具体论述了金融在法国。但是URL可以写在一个完全不同的方式与一个简单的改变routing.yml
配置文件:
http://localhost/articles/europe/france/finance.html
不仅是生成的URL搜索引擎友好,也是重要的用户,可以使用地址栏为伪命令行自定义查询,如以下几点:
http://localhost/articles/tagged/finance +法国+欧元
ob娱乐下载Symfony知道如何解析和生成智能为用户的url。路由系统自动皮智能URL的请求参数,使他们的行动。它还格式超链接包含在响应,这样它们看起来“聪明”。你将学习更多关于这个特性在第9章。
总的来说,这意味着你的名字的方式您的应用程序的行为不应受到URL的方式用于称之为应该,但在应用程序中操作的功能。动作名称解释了什么行动实际上,它通常是一个动词的不定式形式(如显示
,列表
,编辑
等等)。动作名称可以完全无形的给最终用户,所以不要犹豫地使用显式操作名称(如listByName
或showWithComments
)。你会节约代码注释来解释你的行为功能,加上代码将更容易阅读。
添加一个模板
行动预计一个模板来呈现自己。位于一个模板是一个文件模板/
一个模块的目录,命名的行动和行动终止。默认操作终止是“成功”,所以要创建的模板文件myAction
行动是被称为myActionSuccess.php
。
模板应该只包含的代码,所以保持尽可能小的PHP代码。事实上,页面显示“Hello, world !”可以有一个模板如清单4 - 3中一样简单。
清单4 - 3 -mymodule里/模板/ myActionSuccess.php
模板
< p >你好,世界! < / p >
如果您需要执行一些PHP代码模板,您应该避免使用通常的PHP语法,如清单4所示。相反,使用PHP编写模板替代语法,如清单4 - 5所示,保持non-PHP程序员的代码可以理解。不仅将最后的代码是正确的缩进,但它也将帮助你保持行动的复杂的PHP代码,因为只有控制语句(如果
,foreach
,而
等等)有另一个语法。
清单4 -通常的PHP语法,有利于操作,但不利于模板
< p >你好,世界! < / p >< ? php如果(美元的测试){回声“< p > "。时间()。" < / p > ";}? >
清单4 - 5 -选择PHP语法,有利于模板
< p >你好,世界! < / p >< ? php如果(美元的测试):? >< p > < ? php回声时间();? > < / p >< ? phpendif;? >
提示
一个好的经验法则检查模板语法是否可读够了,文件不应该包含HTML代码得到PHP或花括号。大多数时候,当打开一个< ? php
,你会关闭它? >
在同一条线上。
传递信息从行动到模板
行动的工作是做所有的复杂计算,数据检索,和测试,设置模板变量响应或测试。ob娱乐下载Symfony action类的属性(通过访问$ this - > variableName
在行动)直接访问全局命名空间(通过模板variableName美元
)。清单4 - 6和4 - 7显示了如何传递信息从行动到模板。
清单4 - 6 -设置动作的动作属性模板可用
< ? php类mymoduleActions扩展sfActions{公共函数executeMyAction(){今天美元=获取当前日期();这个美元- >小时=今天美元(“小时”];}}
清单4 - 7 -模板直接访问操作的属性
< p >你好,世界! < / p >< ? php如果(美元每小时> =18):? >< p >或者我应该说晚上好吗?它已经< ? php回声美元每小时? >. < / p >< ? phpendif;? >
请注意
模板已经访问几件数据,无需任何变量设置的行动。每个模板都可以调用的方法sf_context美元
,sf_request美元
,sf_params美元
,sf_user美元
对象。它们包含有关当前上下文数据,请求,请求参数,和会话。你很快就会学会如何有效地使用它们。
从用户收集信息和形式
表单是一个从用户那里获得信息的好方法。写作形式和在HTML表单元素有时会很麻烦,特别是当你想成为xhtml。你可能包括表单元素在symfony模板通常的方法,如清单4 - 8所示ob娱乐下载,但symfony提供了帮助,让这个任务变得更加容易。
清单4 - 8 -模板可以包括通常的HTML代码
< p >你好,世界! < / p >< ? php如果(美元每小时> =18):? >< p >或者我应该说晚上好吗?它已经< ? php回声美元每小时? >. < / p >< ? phpendif;? ><形式方法=“职位”action =“myapp_dev.php / mymodule里/ anotherAction”> <标签为=“名称”>你叫什么名字?< /标签> < input type =“文本”name =“名称”id =“名称”值=”“/ > < input type =“提交”值=“Ok”/ > < /形式>
一个助手是一个PHP函数定义的symfony中是使用模板。ob娱乐下载它输出一些HTML代码和更快的使用比自己编写实际的HTML代码。使用symfob娱乐下载ony的帮手,可以有相同的结果如清单4 - 8所示的代码清单4 - 9日。
清单4 - 9日——这是更快和更容易使用比使用HTML标记
< p >你好,世界! < / p >< ? php如果(美元每小时> =18):? >< p >或者我应该说晚上好吗?它已经< ? php回声美元每小时? >. < / p >< ? phpendif;? >< ? php回声form_tag(“mymodule里/ anotherAction”)? >< ? php回声label_for(“名字”,“你叫什么名字?”)? >< ? php回声input_tag(“名字”)? >< ? php回声submit_tag(“好吧”)? >> < /形式
侧边栏
助手是来帮助你的
在清单4 - 9在这个例子中,如果你认为助手版本并不是真正的快写比HTML,考虑这个:
< ? php>card_list美元=数组(>“签证”= >“签证”、>“桅杆”= >“万事达”、>美国运通的= >美国运通的、>“盘”= >“发现”);>回声select_tag(“cc_type”,options_for_select(card_list美元,美国运通的));>? >
这个HTML输出以下:
<选择name =“cc_type”id =“cc_type”> <选项值=“签证”> < /选项> <选项值=签证“桅杆”> < /选项> <选项值=“美国运通”选择=“选择”>美国运通< /选项> <选项值=“盘”> < /发现选项> < /选择>
助手在模板的好处是原始的编码速度,代码清晰、简洁。唯一的代价是时间去学习它们,这将结束当你完成这本书,写的时候,你应该已经有一个快捷方式在您喜欢的文本编辑器。所以你可以不使用symfony助手在HTML模板和ob娱乐下载写你总是做的方式,但这将是一个巨大的损失,更有趣。
注意,使用短打开标记(< ? =
,相当于< ? php回声
)不建议专业的web应用程序,因为您的生产web服务器能够理解多个脚本语言,因此感到困惑。此外,短开放标签不使用默认的PHP配置和服务器调整需要激活。最终,当你不得不处理XML和验证,因为相差甚远< ?
在XML中有着特殊的意义。
操纵形式值得自己的章,因为symfony提供了很多工具,主要助手,使它更容易。ob娱乐下载你会了解更多关于这些帮手在第10章。
链接到另一个动作
你已经知道有一个总解耦操作名称和URL用于调用它。如果你创建一个链接anotherAction
在一个模板如清单4到10,它只会使用默认路由。如果你决定改变url的方式看,那么你将需要审查所有模板修改超链接。
清单4到10 -超链接,经典的方法
< a href =“/ myapp_dev.php / mymodule里/ anotherAction ? name =匿名”< / > >我永远不要说我的名字
为了避免这种麻烦,你应该总是使用link_to ()
助手创建超链接到您的应用程序的行为。清单4展示了使用超链接的帮手。
清单4 - - - -link_to ()
助手
< p >你好,世界! < / p >< ? php如果(美元每小时> =18):? >< p >或者我应该说晚上好吗?它已经< ? php回声美元每小时? >. < / p >< ? phpendif;? >< ? php回声form_tag(“mymodule里/ anotherAction”)? >< ? php回声label_for(“名字”,“你叫什么名字?”)? >< ? php回声input_tag(“名字”)? >< ? php回声submit_tag(“好吧”)? >< ? php回声link_to(“我从来没说我的名字,“mymodule里/ anotherAction ? name =匿名”)? >> < /形式
生成的HTML将会和以前一样,除了当你改变你的路由规则,所有的模板正确行为和格式化相应的url。
的link_to ()
助手,和许多其他助手一样,接受特殊选项和额外的标记属性的另一个论点。清单4 - 12显示了一个示例的一个选项参数,生成的HTML。选择参数是一个关联数组或一个简单的字符串显示键=值
夫妇由空格隔开。
清单4 - 12 -大多数助手接受一个选项参数
/ /选项参数作为一个关联数组中< ? php回声link_to(“我从来没说我的名字,“mymodule里/ anotherAction ? name =匿名”,数组(“类”= >“special_link”,“确认”= >“你确定吗?”,“绝对”= >真正的))? >/ /选项参数为字符串< ? php回声link_to(“我从来没说我的名字,“mymodule里/ anotherAction ? name =匿名”,“阶级= special_link确认=你确定吗?绝对= true”)? >/ /调用输出相同= > <类=“special_link”onclick =“返回确认(“你确定吗?”);“href =“http://localhost/myapp_dev.php/mymodule/anotherAction/name/anonymous”< / > >我永远不要说我的名字
每当你使用一个symfony辅助输出Hob娱乐下载TML标签,您可以插入额外的标签属性(如类
属性在清单4 - 12)的示例中选择参数。你甚至可以写这些属性的“应急的”HTML 4.0(没有双引号),和symfony将在良好格式化的XHTML输出。ob娱乐下载这是另一个原因帮手比HTML快写。
请注意
因为它需要一个额外的解析和转换,字符串的语法比数组语法有点慢。
像表单助手,助手的联系很多,有很多选择。第九章将详细描述它们。
获取信息的请求
用户是否通过一种形式发送信息(通常是在一个POST请求)或通过URL (GET请求),您可以检索相关数据的行动getRequestParameter ()
的方法sfActions
对象。清单42展示了,anotherAction
,你检索的值的名字
参数。
清单42 -获取数据请求参数的行动
< ? php类mymoduleActions扩展sfActions{…公共函数executeAnotherAction(){这个美元- >的名字=这个美元- >getRequestParameter(“名字”);}}
如果数据操作简单,您甚至不需要使用行动来检索请求参数。模板可以访问一个对象调用sf_params美元
,它提供了一个得到
()方法来检索请求参数,就像getRequestParameter()的行动。
如果executeAnotherAction ()
学报》第4 - 14是空的,清单显示了如何anotherActionSuccess.php
模板将检索相同的的名字
参数。
学报》第4 - 14清单——从请求参数模板中直接获取数据
< p >你好,< ? php回声sf_params美元- >得到(“名字”)? >< / p > !
请注意
为什么不使用$ _POST
,$ _GET
,或$ _REQUEST
变量呢?因为你的url将格式化的不同(如http://localhost/articles/europe/france/finance.html
,没有吗?
也不=
),通常的PHP变量行不通了,只有路由系统能够检索请求参数。你可能想添加输入过滤,防止恶意代码注入,这是唯一可能的,如果你把所有请求参数在一个干净的参数。
的sf_params美元
对象是更强大的比给一个getter相当于一个数组。例如,如果你只是想测试一个请求参数的存在,您可以简单地使用$ sf_params - >有()
方法,而不是测试的实际价值get ()
,如清单4-15。
清单4-15 -测试模板中一个请求参数的存在
< ? php如果(sf_params美元- >有(“名字”)):? >< p >你好,< ? php回声sf_params美元- >得到(“名字”)? >< / p > !< ? php其他的:? >< p >你好,John Doe ! < / p >< ? phpendif;? >
你可能已经猜到,这可以写在一行。由于大部分的getter方法在symfony,ob娱乐下载getRequestParameter ()
在行动和方法$ sf_params - > get ()
方法在模板(事实上,调用相同的方法对同一对象的)接受第二个参数:如果请求参数使用默认值不存在。
< p >你好,< ? php回声sf_params美元- >得到(“名字”,“John Doe”)? >< / p > !
总结
在syob娱乐下载mfony中,页面是由一个动作(方法行动/ actions.class.php
文件前缀执行
(一个文件)和一个模板模板/
目录,通常结局Success.php
)。他们分组模块,根据其功能的应用程序。编写模板是通过助手,symfony提供的功能,返回HTML代码。ob娱乐下载你需要把URL作为响应的一部分,可以根据需要格式化,所以你应该避免使用任何直接引用URL行动命名或请求参数检索。
一旦你知道这些基本原则,你可以用symfony已经写一个完整的web应用程序。ob娱乐下载但是需要你太久,因为几乎每一个任务你必须实现在应用程序开发过程中由一些symfony功能促进了这样或那样的方式。ob娱乐下载这就是为什么这本书现在不停止。
这项工作是GFDL许可执照。