您的位置:首页 > 编程语言 > PHP开发

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

2015-10-01 22:28 741 查看
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 php