symfony權威指南(2)之頁面創建基礎

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');
發佈了88 篇原創文章 · 獲贊 31 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章