《PHP實戰(zhàn):Symfony頁面的基本創(chuàng)建實例詳解》要點:
本文介紹了PHP實戰(zhàn):Symfony頁面的基本創(chuàng)建實例詳解,希望對您有用。如果有疑問,可以聯(lián)系我們。
本文實例分析了Symfony頁面的基本創(chuàng)建辦法.分享給大家供大家參考.具體如下:PHP應(yīng)用
這里我們將會學(xué)習(xí)如何創(chuàng)建一個模塊,這是組織頁面的結(jié)構(gòu)化元素.同時我們也會學(xué)習(xí)如何創(chuàng)創(chuàng)建一個分為一個動作也一個模板的頁面,之所以分為動作與模板,是因為MVC模式.鏈接與表彰是基本的頁面交互,我們將會學(xué)習(xí)如安在模板中插入這些元素并且在動作中進行處理.PHP應(yīng)用
創(chuàng)建一個模塊框架PHP應(yīng)用
Symfony將頁面組織為模塊.在創(chuàng)建一個頁面之前,我們需要創(chuàng)建一個模塊,并且初始化為一個Symfony可以識別的文件結(jié)構(gòu)的空殼.PHP應(yīng)用
Symfony命令行自動化處理模塊的創(chuàng)建.我們只需要調(diào)用init-module任務(wù),并且使用程序名以及模塊名作為參數(shù).在創(chuàng)建了一個myapp程序之后,要向這個程序中添加一個mymodule模塊,我們可以輸入下面的命令:
PHP應(yīng)用
>> dir+????? ~/myproject/apps/myapp/modules/mymodule
>> dir+????? ~/myproject/apps/myapp/modules/mymodule/actions
>> file+???? ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> dir+????? ~/myproject/apps/myapp/modules/mymodule/config
>> dir+????? ~/myproject/apps/myapp/modules/mymodule/lib
>> dir+????? ~/myproject/apps/myapp/modules/mymodule/templates
>> file+???? ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.php
>> dir+????? ~/myproject/apps/myapp/modules/mymodule/validate
>> file+???? ~/myproject/test/functional/myapp/mymoduleActionsTest.php
>> tokens??? ~/myproject/test/functional/myapp/mymoduleActionsTest.php
>> tokens??? ~/myproject/apps/myapp/modules/mymodule/actions/actions.class.php
>> tokens??? ~/myproject/apps/myapp/modules/mymodule/templates/indexSuccess.phpPHP應(yīng)用
與actions/,config/,lib/,templates/,validate/目錄相分離,這個命令只創(chuàng)建三個文件.位于test/目錄中的一個為單元測試.actions.class.php指向默認的模塊歡迎頁面.templates/indexSuccess.php文件為空.PHP應(yīng)用
在actions/actions.class.php文件中默認生成的動作:
PHP應(yīng)用
除了命令行,Symfony還提供了其他的辦法來初始化一個模塊.其中一個辦法就是手動來創(chuàng)建目錄與文件.在許多情況下,一個模塊的動作與模板就意味著操作一個給定數(shù)據(jù)表的數(shù)據(jù).因為創(chuàng)建,獲取,更新,以及從一個數(shù)據(jù)表中刪除數(shù)據(jù)記錄的必須代碼通常都是相同的,Symfony提供了一個名為框架的機制來我們生成這些代碼.我們后續(xù)會繼續(xù)介紹.PHP應(yīng)用
添加一個頁面PHP應(yīng)用
在Symfony中,頁面后面的邏輯存儲在動作中,而表面則是在模板中.沒有邏輯的頁面仍然需要一個空的動作.PHP應(yīng)用
添加一個動作PHP應(yīng)用
"Hello,world!"頁面則會通過一個myAction的動作進行拜訪.要創(chuàng)建這個動作,只需要在mymoduleActions類中添加一個executeMyAction方法,如下所示:
PHP應(yīng)用
動作辦法的名字總是execute'Xxx'()的形式,其中名字的第二部分是動作的名字,并且第一個字母大寫.PHP應(yīng)用
現(xiàn)在我們可以哀求下面的URL:
http://localhost/myapp_dev.php/mymodule/myActionPHP應(yīng)用
Symfony將會抱怨丟失了myActionSuccess.php模板.這是正常的.在Symfony中,一個頁面通常是由一個動和與一個模板組成的.PHP應(yīng)用
URL是響應(yīng)的一部分PHP應(yīng)用
Symfony包含一個路由系統(tǒng)允許我們在實際的動作名與需要調(diào)用的URL格式之間有一個完整的分隔.這允許自定義URL的自定義格式,就如同他是響應(yīng)的一部分.我們不再為文件的結(jié)構(gòu)或是哀求的參數(shù)據(jù)限制,一個動作的URL看起來就我們所希望的解析.例如,到一個名為article模塊的索引動作調(diào)用通常如下面的樣子:
http://localhost/myapp_dev.php/article/index?id=123PHP應(yīng)用
這個URL由一個數(shù)據(jù)獲取一篇指定的文章.但是URL可以通過在routingyml配置文件中作一些小的改動而以一種完全不同的方式進行編寫:
http://localhost/articles/europe/france/finance.htmlPHP應(yīng)用
這樣的URL不僅對于搜索引擎友好的,他對于用戶來說也是十分重要的,這樣用戶就可以將地址欄作為一個偽碼命令來自定義查詢,例如下面的例子:
http://localhost/articles/tagged/finance+france+euroPHP應(yīng)用
Symfony知道如何為用戶解析并生成URL.路由系統(tǒng)會自動從一個簡潔URL中脫去所哀求的參數(shù),并使其為動作可用.他同時也會格式化響應(yīng)中所包含的超鏈接,從而使其看起來更為簡潔.我們將會在第九章了解這個特性的更多內(nèi)容.PHP應(yīng)用
總之,這就意味著我們命名程序的動作的方式不應(yīng)受到調(diào)用他們的URL的樣子的影響,而是受程序中動作的函數(shù)控制.一個動作的名了解釋了動作實際所做的內(nèi)容,而且通常為不定式格式中的一個動詞(例如show,list,edit).動作的名字可以做到對于終端用戶完全不可見,從而不必擔(dān)心使用顯式的動作名.我們可以有效的利用代碼注釋來解釋我們的函數(shù)功能,從而使代碼更讀.PHP應(yīng)用
添加一個模板PHP應(yīng)用
動作需要一個模板來進行封裝.一個模板就是位于一個模塊的templates/目錄的一個文件,通常是以動作和動作的詞尾來進行命名的.默認的動作詞尾為"success",所以為myAction動作所創(chuàng)建的模板文件應(yīng)命名為myActionSuccess.php.PHP應(yīng)用
模板只包含表現(xiàn)代碼,所以在其中要包含盡可有少的PHP代碼.實際上,一個顯示"Hello,world!"的頁面只有一行的代碼的模板.
PHP應(yīng)用
如果我們需要在模板中運行一些PHP代碼,我們應(yīng)避免使用下面所列的通常的PHP語法.相反,應(yīng)使用另一種PHP語法來編寫我們的模板,從而使得代碼對于非PHP程序來說更易于理解.不僅最終代碼是正確的,而且有助于我們在動作中保持復(fù)雜的PHP代碼,因為只有控制語句有對應(yīng)代碼.PHP應(yīng)用
通常的PHP語法如下:
PHP應(yīng)用
替代的PHP語法如下:
PHP應(yīng)用
動作的工作是要完成所有復(fù)雜的計算,數(shù)據(jù)讀取以及測試,并且設(shè)置要輸出或是測試的模板變量.Symfony使得動作類的屬性在全局名字空間中為模板可用.下面顯示如何由動作向模板傳遞信息.PHP應(yīng)用
在動作中設(shè)置動作屬性從而使其為模板可用:
PHP應(yīng)用
模板直接拜訪動作屬性:
PHP應(yīng)用
模板已經(jīng)可以訪問一些數(shù)據(jù),而不需要在動作中設(shè)置任何變量.每一個模板通??梢哉{(diào)用$sf_context,$sf_request,$sf_params,$sf_user對象的方法.他們包含與當(dāng)前內(nèi)容,哀求,哀求參數(shù)以及會話相關(guān)的數(shù)據(jù).我們很快就會學(xué)到他們的用法.PHP應(yīng)用
使用表單向用戶收集信息PHP應(yīng)用
表單是向用戶收集信息的一個好辦法.使用HTML編寫表單以及表單元素有時是相當(dāng)麻煩的,尤其是當(dāng)我們希望適用于XTHML時更是如此.我們可以用通常的方式在Symfony模板中包含表單元素,如下面所示,但是Symfony提供了幫助器從而使得這個任務(wù)更為簡單.PHP應(yīng)用
模板可以包含通常的HTML代碼:
PHP應(yīng)用
一個贊助器是用在模板中的由Symfony定義的PHP函數(shù).他輸出HTML代碼,并且比我們自己編寫實際的HTML代碼要快速得多.使用Symfony贊助器,我們用下面的代碼得到的輸出結(jié)果與上面通常的HTML代碼相同:
PHP應(yīng)用
如果在上面的代碼中,我們認為使用贊助器的版本并不會比編寫HTML代碼快,那么我們可以考慮一下下面的情況:
PHP應(yīng)用
這會得到下面的HTML輸出結(jié)果:
PHP應(yīng)用
在模板中使用的贊助器的好處就在于加快了編碼的速度,代碼的清晰與簡潔.而代價就是我們需要花費時進行學(xué)習(xí).所以我們可以在模板中不使用Symfony贊助器,并且以我們通常的方式來編寫代碼,但是這會是一個巨大的損失.PHP應(yīng)用
注意,短開放標(biāo)記的用法(<?=,等同于<?php echo)并不推薦在專業(yè)的web程序中使用,因為我們的web服務(wù)器也許會理解多個腳本語言,從而會使其變得迷惑.另外,短開放標(biāo)記并不會與默認的PHP配置進行工作,而且需要修改服務(wù)來激活.最后,當(dāng)我們必須處理XML與驗證時,他會出錯,因為<?在XML中有著特殊的意義.PHP應(yīng)用
表單處理有專門的一章進行討論,因為Symfony提供了許多工具,絕大數(shù)的贊助器,來使其簡單.我們將會在第10章了解到關(guān)于贊助器更多的內(nèi)容.PHP應(yīng)用
鏈接到另一個動作PHP應(yīng)用
我們現(xiàn)在已經(jīng)知道在動作名字與需要調(diào)用的URL之間有一個分離.所以我們使用下面的方式來創(chuàng)建到另一個動作的鏈接時,他只會工作在默認的路由系統(tǒng)中.如果我們以后決定改變URL的樣子,那么我們就需要查看所有的模板來改變超鏈接.PHP應(yīng)用
超鏈接,通常的辦法:
PHP應(yīng)用
要避免這樣的麻煩,我們應(yīng)總是使用link_to()贊助器來我們的程序動作創(chuàng)建超鏈接.下面的例子演示了超鏈接贊助器的用法.PHP應(yīng)用
link_to()贊助器:
PHP應(yīng)用
生成的HTML與前面的相同,所不同的就在于當(dāng)我們改變我們的路由規(guī)則時,所有的模板都會正確工作,并且重新格式化URL.PHP應(yīng)用
link_to()贊助器,就像其他的贊助器,會接受特定選項的額外參數(shù)和額外的標(biāo)簽屬性.下面的例子顯示了一個可選參數(shù)以及生成的HTML.選項參數(shù)或者是一個相關(guān)的數(shù)組或者是由空格分隔的顯示key=value的簡單字符串.PHP應(yīng)用
大多數(shù)贊助器接收一個可選參數(shù):
PHP應(yīng)用
任何時候我們使用一個Symfony贊助器來輸出一個HTML標(biāo)記時,我們可以在可選參數(shù)中插入額外的標(biāo)記屬性.我們可以使用HTML 4.0的方式來編寫這樣的屬性,而Symfony將會以更簡潔的格式進行輸出.這也就是為什么贊助器會比HTML更容易編寫的原因.PHP應(yīng)用
因為他需要一個額外的分析與轉(zhuǎn)換,字符串語法比數(shù)組語法要慢一些.PHP應(yīng)用
與表單贊助器相類似,鏈接贊助器有更多的數(shù)量和選項.PHP應(yīng)用
由哀求得到信息PHP應(yīng)用
無論用戶通過表單發(fā)送信息(通常以POST哀求的方式)還是通過URL(GET哀求),我們可以通過帶有sfActions對象的getRequestParameter()方法的動作來獲取數(shù)據(jù).下面的例子顯示如何在anotherAction中得到name參數(shù)的值.PHP應(yīng)用
在動作中由哀求參數(shù)得到數(shù)據(jù):
PHP應(yīng)用
如果數(shù)據(jù)的處理是簡單的,我們甚至并不需要使用動作來得到哀求參數(shù).模板可以訪問一個名為$sf_params的對象,他提供了get()方法來得到哀求參數(shù),就如同動作中的getRequestParameter()方法.PHP應(yīng)用
如果executeAnotherAction()辦法是空的,下面的例子顯示了anotherActionSuccess.php模板文件如何得到同樣的name參數(shù).PHP應(yīng)用
在模板中直接由哀求參數(shù)得到數(shù)據(jù):
PHP應(yīng)用
那么為什么不使用$_POST,$_GET或是$_REQUEST變量呢?因為我們的URL將會不同的方式進行格式化(http://localhost/articles/europe/france/finance.html),這樣通常的PHP變量就會再起作用,并且只有路由系統(tǒng)可以得到哀求參數(shù).而我們希望添加輸入過濾來阻止惡意代碼注入,而這只有當(dāng)我們將所有的哀求參數(shù)保存在一個簡潔的參數(shù)裝配器中才可能.PHP應(yīng)用
$sf_params對象比僅提供一個與數(shù)組等同的方法要強大得多.例如,如果我們只是希望檢測一個哀求參數(shù)是否存在,我們可以簡單的使用$sf_params->has()方法,而不使用get()測試實際的值.PHP應(yīng)用
在模板中測試哀求參數(shù)的存在:
PHP應(yīng)用
我們已經(jīng)猜到了,這可以在單一的代碼行中編寫.與Symfony中大多數(shù)的獲取方法一樣,動作中的getRequestParameter()方法與模板中的$sf_params->get()(實際上調(diào)用同一個對象的相同主法)方法接受第二個參數(shù):如果沒有提供哀求參數(shù)則使用默認值:
PHP應(yīng)用
總結(jié)PHP應(yīng)用
在Symfony中,頁面是由一個動作(actions/actions.class.php文件中以execute為前綴的一個方法)和一個模板(templates/目錄下的一個文件,通常以Success.php結(jié)尾)組成的.他們通地在程序中的函數(shù)組織在一個模塊中.編寫模板是由幫助器來完成的,而幫助器則是由Symfony提供的返回HTML代碼的函數(shù).而我們需要將URL看作響應(yīng)的一部分,而URL在需要可以格式化,所以我們應(yīng)避免在動作命名中使用到URL的直接引用或者是哀求參數(shù)檢索.PHP應(yīng)用
一旦我們知道了這些基本原則,我們就可以使用Symfony來編寫一個完整的Web程序了.但是我們的路還有很長,因為我們在程序開發(fā)過程需要處理的每一個任務(wù)由一些Symfony特性來完成的.PHP應(yīng)用
希望本文所述對大家的symfony框架程序設(shè)計有所贊助.PHP應(yīng)用
歡迎參與《PHP實戰(zhàn):Symfony頁面的基本創(chuàng)建實例詳解》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/12529.html