提前道歉 - 这里有一个继承项目的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
}
我希望电子邮件参数能够显示,但不会显示。
参数,你不留?
答案 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