无法在symfony 1.0.17中传递参数

时间:2011-04-10 19:24:51

标签: php forms parameters symfony1

提前道歉 - 这里有一个继承项目的symfony业余爱好者。

我已将以下内容添加到apps / frontend / modules / top / templates / indexSuccess.php中:

<?php echo form_tag('contents/'.$adv_data->getId()) ?>
<?php echo $sf_params->get('email'); ?>
<?php echo input_tag('email', $sf_params->get('email'))?>
<?php echo submit_tag('Next') ?>
</form>

然后我将以下内容添加到executeContents()方法中的apps / frontend / modules / top / actions / actions.class.php中:

$email = $this->getRequestParameter('email');
$this->getRequest()->setParameter('email', $email);
if (!$this->validateForm()) {
  $this->redirect($adv_id); // sends me back to the page with the form up above
}

我希望电子邮件参数能够显示,但不会显示。
参数,你不留?

1 个答案:

答案 0 :(得分:1)

首先,您并不真正使用请求参数持有者将变量传递给模板。每个模板将沿您在控制器中指定的变量传递。你的行动应该是这样的:

// $this->email will be available in the template as $email
// or $sf_params->get('email')
$this->email = $this->getRequestParameter('email');

if (!$this->validateForm()) {
  // pass either module/controller and params or route name and params... 
  // just like link_to() helper function
  $this->redirect('@route_name?id='.$adv_id);

}

然而,您可能想要做的不是重定向,而是转发回呈现表单的操作,否则您的帖子数据将不会被转移:$this->forward('module', 'action');原因是redirect就像执行header('Location: ...')一样 - 它创建了一个全新的请求,另一方面forward只是将相同的请求发送到不同的模块/操作,因此您的所有请求参数都在$_GET和{ {1}}被转移。您可以在文档的Inside the Controller Layer部分阅读更多相关信息。

现在你没有看到变量的原因是因为$_POST对应于模板参数持有者,而不是请求的。要获取请求的参数持有者,您可以使用模板中的$sf_params。您可以在文档的The Basics of Page Creation: Passing Information from the Action to the Template子部分中了解更多相关信息。

您可以在此处找到1.0的完整文档:The Definitive Guide to Symfony