symfony权威指南(2)之页面创建基础

2024-06-02 19:18

本文主要是介绍symfony权威指南(2)之页面创建基础,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

symfony把页面组织成模块,在建立页面之前,你必须先建立一个模块,也就是一个symfony能识别的目录结构的空壳。

可以用如下命令创建一个symfony模块,比如创建一个名叫php的模块:

这条命令在modules目录下生成了如下文件:


其中actions.class.php文件的内容如下:

/**
* php actions.
*
* @package    blog
* @subpackage php
* @author     Your name here
* @version    SVN: $Id: actions.class.php 12479 2008-10-31 10:54:40Z fabien $
*/
class phpActions extends sfActions
{
/*** Executes index action** @param sfRequest $request A request object*/public function executeIndex(sfWebRequest $request){$this->forward('default', 'module');}
}

indexSuccess.php文件的内容为空。

现在访问http://localhost:8080/php,可以看到如下的页面:



现在让我们进入正题,来创建一个新的页面,分为如下步骤:

1、增加一个动作

我们在actions.class.php文件中,新增如下代码:

 public function executeTest(){}
这样我们就在php模块中新增了一个test动作,注意在symfony中动作的命名规范:

①动作的名字永远是executeXxx(),名字第二部分的第一个字母总是大写

②URL是区分大小写的,symfony也是区分大下写的,这就是说,如果你定义一个executemyaction()方法或者executeMyaction,然后在浏览器里面调用myAction方法,symfony会返回404错误信息。

如果现在访问http://localhost:8080/php/test,可以看到如下的页面:

这个页面告诉我们我们还要在templates目录下创建一个testSuccess.php文件,内容如下:

<p>hello,world!</p>

2、从动作传递信息给模板

symfony让动作类的属性可以直接在模板的全局命名空间里被访问(即在动作里通过$this->variableName访问的变量在模板中可以直接用$variableName访问到),还是用test动作来试验:

public function executeTest(){$this->hour = date("H", time());}
<p>hello,world!</p>
<?php if($hour >= 18): ?><p>it's already <?php echo $hour ?>,time to go to bed</p>
<?php endif; ?>

现在访问 http://localhost:8080/php/test,

3、通过表单从用户获取数据

symfony提供了表单辅助函数来帮助快速书写html代码,下面是一个例子:

<?php use_helper('form') ?>
<?php echo form_tag('php/another') ?>
<?php echo label_for('name','what\'s your name?' ) ?>
<?php echo input_tag('name') ?>
<?php echo submit_tag('ok') ?>
</form>


4、链接到另一个动作

传统的超链接一般类似与下面这样:

?php echo "<a href='another?name=anonymous'>i will never say my name</a>"; ?>
但是这样的链接有一个弊端,那便是如果做了伪静态的话,要到模板文件中将这些链接地址一一修改,在symfony对这种问题提供了一个辅助函数link_to(),下面是一个例子:

<?php echo link_to('i will never say my name', 'php/another?name=anonymous'); ?>


5、从请求中取得信息

在symfony框架中你可以通过sfAction对象的getRequestParameter()方法取得相关的数据。下面是一个例子:

public function executeAnother(){$this->name = $this->getRequestParameter('name');}
当然如果操作很简单,你可以直接在模板中直接通过$sf_params的get()方法来获取参数的值。下面的两种写法是等价的:

if($sf_params->has('name')){echo "hello,".$sf_params->get('name');
}else{echo "hello, nobody";
}
echo "hello,".$sf_params->get('name', 'nobody');

这篇关于symfony权威指南(2)之页面创建基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024847

相关文章

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

Vim使用基础篇

本文内容大部分来自 vimtutor,自带的教程的总结。在终端输入vimtutor 即可进入教程。 先总结一下,然后再分别介绍正常模式,插入模式,和可视模式三种模式下的命令。 目录 看完以后的汇总 1.正常模式(Normal模式) 1.移动光标 2.删除 3.【:】输入符 4.撤销 5.替换 6.重复命令【. ; ,】 7.复制粘贴 8.缩进 2.插入模式 INSERT

JAVA读取MongoDB中的二进制图片并显示在页面上

1:Jsp页面: <td><img src="${ctx}/mongoImg/show"></td> 2:xml配置: <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

JavaScript全屏,监听页面是否全屏

在JavaScript中,直接监听浏览器是否进入全屏模式并不直接支持,因为全屏API主要是关于请求和退出全屏模式的,而没有直接的监听器可以告知页面何时进入或退出全屏模式。但是,你可以通过在你的代码中跟踪全屏状态的改变来模拟这个功能。 以下是一个基本的示例,展示了如何使用全屏API来请求全屏模式,并在请求成功或失败时更新一个状态变量: javascriptlet isInFullscreen =

ps基础入门

1.基础      1.1新建文件      1.2创建指定形状      1.4移动工具          1.41移动画布中的任意元素          1.42移动画布          1.43修改画布大小          1.44修改图像大小      1.5框选工具      1.6矩形工具      1.7图层          1.71图层颜色修改          1

vue同页面多路由懒加载-及可能存在问题的解决方式

先上图,再解释 图一是多路由页面,图二是路由文件。从图一可以看出每个router-view对应的name都不一样。从图二可以看出层路由对应的组件加载方式要跟图一中的name相对应,并且图二的路由层在跟图一对应的页面中要加上components层,多一个s结尾,里面的的方法名就是图一路由的name值,里面还可以照样用懒加载的方式。 页面上其他的路由在路由文件中也跟图二是一样的写法。 附送可能存在

vue+elementui分页输入框回车与页面中@keyup.enter事件冲突解决

解决这个问题的思路只要判断事件源是哪个就好。el分页的回车触发事件是在按下时,抬起并不会再触发。而keyup.enter事件是在抬起时触发。 so,找不到分页的回车事件那就拿keyup.enter事件搞事情。只要判断这个抬起事件的$event中的锚点样式判断不等于分页特有的样式就可以了 @keyup.enter="allKeyup($event)" //页面上的//js中allKeyup(e

vue子路由回退后刷新页面方式

最近碰到一个小问题,页面中含有 <transition name="router-slid" mode="out-in"><router-view></router-view></transition> 作为子页面加载显示的地方。但是一般正常子路由通过 this.$router.go(-1) 返回到上一层原先的页面中。通过路由历史返回方式原本父页面想更新数据在created 跟mounted