2011-04-10 84 views
0

事先道歉 - 這裏有一個symfony業餘愛好者的繼承項目。無法在symfony 1.0.17中傳遞參數

我已經添加了以下內容的應用程序/前端/模塊/頂/模板/ 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()方法中的.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

首先你不真的使用請求參數的持有者來傳遞變量到你的模板。每個模板將沿着您在控制器中分配的變量傳遞。你的行動應該是這樣的:

// $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$_POST中的所有請求參數都會結轉。您可以在文檔的Inside the Controller Layer部分閱讀更多關於此的信息。

現在你沒有看到變量的原因是因爲$sf_params對應於模板參數的持有者,而不是請求的。要獲取請求的參數持有者,您可以使用模板中的$sf_request。您可以在文檔的The Basics of Page Creation: Passing Information from the Action to the Template子部分閱讀更多信息。

你可以找到完整的文檔1.0位置:The Definitive Guide to Symfony

+0

真棒!正是我需要知道的。非常感謝你。 – blurmy23 2011-04-10 20:49:42