DDR爱好者之家 Design By 杰米

本文实例分析了Symfony页面的基本创建方法。分享给大家供大家参考。具体如下:

这里我们将会学习如何创建一个模块,这是组织页面的结构化元素。同时我们也会学习如何创创建一个分为一个动作也一个模板的页面,之所以分为动作与模板,是因为MVC模式。链接与表彰是基本的页面交互,我们将会学习如何在模板中插入这些元素并且在动作中进行处理。

创建一个模块框架

Symfony将页面组织为模块。在创建一个页面之前,我们需要创建一个模块,并且初始化为一个Symfony可以识别的文件结构的空壳。

Symfony命令行自动化处理模块的创建。我们只需要调用init-module任务,并且使用程序名以及模块名作为参数。在创建了一个myapp程序之后,要向这个程序中添加一个mymodule模块,我们可以输入下面的命令:
复制代码 代码如下:> cd ~/myproject
> symfony init-module myapp mymodule

dir+      ~/myproject/apps/myapp/modules/mymodule
dir+      ~/myproject/apps/myapp/modules/mymodule/actions
file+     ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
dir+      ~/myproject/apps/myapp/modules/mymodule/config
dir+      ~/myproject/apps/myapp/modules/mymodule/lib
dir+      ~/myproject/apps/myapp/modules/mymodule/templates
file+     ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php
dir+      ~/myproject/apps/myapp/modules/mymodule/validate
file+     ~/myproject/test/functional/myapp/mymoduleActionsTest.php
tokens    ~/myproject/test/functional/myapp/mymoduleActionsTest.php
tokens    ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
tokens    ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php

与actions/,config/,lib/,templates/,validate/目录相分离,这个命令只创建三个文件。位于test/目录中的一个为单元测试。actions.class.php指向默认的模块欢迎页面。templates/indexSuccess.php文件为空。

在actions/actions.class.php文件中默认生成的动作:
复制代码 代码如下:<"Hello,world!"页面则会通过一个myAction的动作进行访问。要创建这个动作,只需要在mymoduleActions类中添加一个executeMyAction方法,如下所示:
复制代码 代码如下:<"success",所以为myAction动作所创建的模板文件应命名为myActionSuccess.php。

模板只包含表现代码,所以在其中要包含尽可有少的PHP代码。实际上,一个显示"Hello,world!"的页面只有一行的代码的模板。
复制代码 代码如下:<p>Hello, world!</p>

如果我们需要在模板中运行一些PHP代码,我们应避免使用下面所列的通常的PHP语法。相反,应使用另一种PHP语法来编写我们的模板,从而使得代码对于非PHP程序来说更易于理解。不仅最终代码是正确的,而且有助于我们在动作中保持复杂的PHP代码,因为只有控制语句有对应代码。

通常的PHP语法如下:
复制代码 代码如下:<p>Hello, world!</p>
<"<p>".time()."</p>";
 }
   
"codetitle">复制代码 代码如下:<p>Hello, world!</p>
<"codetitle">复制代码 代码如下:<"codetitle">复制代码 代码如下:<p>Hello, world!</p>
<"codetitle">复制代码 代码如下:<p>Hello, world!</p>
<"post" target="/myapp_dev.php/mymodule/anotherAction">
  <label for="name">What is your name"text" name="name" id="name" value="" />
  <input type="submit" value="Ok" />
</form>

一个帮助器是用在模板中的由Symfony定义的PHP函数。他输出HTML代码,并且比我们自己编写实际的HTML代码要快速得多。使用Symfony帮助器,我们用下面的代码得到的输出结果与上面通常的HTML代码相同:
复制代码 代码如下:<p>Hello, world!</p>
<"codetitle">复制代码 代码如下:<"codetitle">复制代码 代码如下:<select name="cc_type" id="cc_type">
  <option value="VISA">Visa</option>
  <option value="MAST">MasterCard</option>
  <option value="AMEX" selected="selected">American Express</option>
  <option value="DISC">Discover</option>
</select>

在模板中使用的帮助器的好处就在于加快了编码的速度,代码的清晰与简洁。而代价就是我们需要花费时进行学习。所以我们可以在模板中不使用Symfony帮助器,并且以我们通常的方式来编写代码,但是这会是一个巨大的损失。

注意,短开放标记的用法(<"codetitle">复制代码 代码如下:<a href="/myapp_dev.php/mymodule/anotherAction">
  I never say my name
</a>

要避免这样的麻烦,我们应总是使用link_to()帮助器来我们的程序动作创建超链接。下面的例子演示了超链接帮助器的用法。

link_to()帮助器:
复制代码 代码如下:<p>Hello, world!</p>
<"codetitle">复制代码 代码如下:// Option argument as an associative array
<"special_link" onclick="return confirm('Are you sure"
    href="http://localhost/myapp_dev.php/mymodule/anotherAction/name/anonymous">
    I never say my name</a>

任何时候我们使用一个Symfony帮助器来输出一个HTML标记时,我们可以在可选参数中插入额外的标记属性。我们可以使用HTML 4.0的方式来编写这样的属性,而Symfony将会以更简洁的格式进行输出。这也就是为什么帮助器会比HTML更容易编写的原因。

因为他需要一个额外的分析与转换,字符串语法比数组语法要慢一些。

与表单帮助器相类似,链接帮助器有更多的数量和选项。

由请求得到信息

无论用户通过表单发送信息(通常以POST请求的方式)还是通过URL(GET请求),我们可以通过带有sfActions对象的getRequestParameter()方法的动作来获取数据。下面的例子显示如何在anotherAction中得到name参数的值。

在动作中由请求参数得到数据:
复制代码 代码如下:<"codetitle">复制代码 代码如下:<p>Hello, <"codetitle">复制代码 代码如下:<"codetitle">复制代码 代码如下:<p>Hello, <?php echo $sf_params->get('name', 'John Doe') ?>!</p>

总结

在Symfony中,页面是由一个动作(actions/actions.class.php文件中以execute为前缀的一个方法)和一个模板(templates/目录下的一个文件,通常以Success.php结尾)组成的。他们通地在程序中的函数组织在一个模块中。编写模板是由帮助器来完成的,而帮助器则是由Symfony提供的返回HTML代码的函数。而我们需要将URL看作响应的一部分,而URL在需要可以格式化,所以我们应避免在动作命名中使用到URL的直接引用或者是请求参数检索。

一旦我们知道了这些基本原则,我们就可以使用Symfony来编写一个完整的Web程序了。但是我们的路还有很长,因为我们在程序开发过程需要处理的每一个任务由一些Symfony特性来完成的。

希望本文所述对大家的symfony框架程序设计有所帮助。

DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米