// Option argument as an associative array
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous',
array(
'class' => 'special_link',
'confirm' => 'Are you sure?',
'absolute' => true
)) ?>
// Option argument as a string
<?php echo link_to('I never say my name', 'mymodule/anotherAction?name=anonymous',
'class=special_link confirm=Are you sure? absolute=true') ?>
// Both calls output the same
=> <a
href="https://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参数的值。
在动作中由请求参数得到数据:
复制代码 代码如下:
<?php
class mymoduleActions extends sfActions
{
...
public function executeAnotherAction()
{
$this->name = $this->getRequestParameter('name');
}
}
如果数据的处理是简单的,我们甚至并不需要使用动作来得到请求参数。模板可以访问一个名为$sf_params的对象,他提供了get()方法来得到请求参数,就如同动作中的getRequestParameter()方法。
如果executeAnotherAction()方法是空的,下面的例子显示了anotherActionSuccess.php模板文件如何得到同样的name参数。
在模板中直接由请求参数得到数据:
复制代码 代码如下:
<p>Hello, <?php echo $sf_params->get('name') ?>!</p>
那么为什么不使用$_POST,$_GET或是$_REQUEST变量呢?因为我们的URL将会不同的方式进行格式化(),这样通常的PHP变量就会再起作用,并且只有路由系统可以得到请求参数。而我们希望添加输入过滤来阻止恶意代码注入,而这只有当我们将所有的请求参数保存在一个简洁的参数装配器中才可能。
$sf_params对象比仅提供一个与数组等同的方法要强大得多。例如,如果我们只是希望检测一个请求参数是否存在,我们可以简单的使用$sf_params->has()方法,而不使用get()测试实际的值。
在模板中测试请求参数的存在:
复制代码 代码如下:
<?php if ($sf_params->has('name')): ?>
<p>Hello, <?php echo $sf_params->get('name') ?>!</p>
<?php else: ?>
<p>Hello, John Doe!</p>
<?php endif; ?>
我们已经猜到了,这可以在单一的代码行中编写。与Symfony中大多数的获取方法一样,动作中的getRequestParameter()方法与模板中的$sf_params->get()(实际上调用同一个对象的相同主法)方法接受第二个参数:如果没有提供请求参数则使用默认值:
复制代码 代码如下:
<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的直接引用或者是请求参数检索。