摘要:頁(yè)面文件的擴(kuò)展名為。頁(yè)面標(biāo)題,必填。頁(yè)面執(zhí)行的聲明周期當(dāng)所有組件被初始化并且在處理請(qǐng)求之前,該函數(shù)被執(zhí)行。函數(shù)在頁(yè)面開始執(zhí)行時(shí)執(zhí)行。當(dāng)系統(tǒng)找不到目標(biāo)頁(yè)面時(shí),系統(tǒng)將顯示頁(yè)面內(nèi)容,為。
Pages
Pages:頁(yè)面;網(wǎng)站頁(yè)面的內(nèi)容由Page模板定義。模板文件位置:themes/theme_name/pages目錄下。頁(yè)面文件的擴(kuò)展名為htm。文檔結(jié)構(gòu)中,Configuration(配置)和Twig Markup(標(biāo)記)部分是必須的,PHP代碼部分是可選的。
最簡(jiǎn)單的例子
url = "/" ==Hello, world!
頁(yè)面配置
頁(yè)面配置在Configuration Section中定義。主要定義一下內(nèi)容:
參數(shù) 描述
URL 頁(yè)面網(wǎng)址,必填。
title 頁(yè)面標(biāo)題,必填。
Layout 頁(yè)面布局可選。如果指定,應(yīng)包含布局文件的名稱,不帶擴(kuò)展名,例如:default。
Description 后端接口的頁(yè)面描述,可選。
URL設(shè)置語(yǔ)法
URL以正斜杠" / "開頭,可以包含參數(shù)也可以不包含。比如:
url = "/blog"
帶參數(shù)的URL以" : "開頭。比如下面的url表示,/blog/post/...斜杠后面的就是參數(shù)。這個(gè)參數(shù)可以被October組件或者PHP代碼部分訪問。
url = "/blog/post/:post_id"
PHP代碼部分訪問的例子如下:參數(shù)名與php變量名要求一致。
url = "/blog/post/:post_id" == function onStart() { $post_id = $this->param("post_id"); } ==
可選參數(shù):只需要在其后面加?即可。
url = "/blog/post/:post_id?"
URL中間的參數(shù)不能是可選的。在下一個(gè)示例中,該:post_id參數(shù)被標(biāo)記為可選,但會(huì)當(dāng)做必須的處理。
url = "/blog/:post_id?/comments"
可選參數(shù)運(yùn)行有默認(rèn)值。在沒有提供參數(shù)的時(shí)候,這些默認(rèn)值作為POST的值。默認(rèn)值不能包含任何" 星號(hào) 管道符 問號(hào) "
url = "/blog/category/:category_id?10"
還可以使用正則表達(dá)式驗(yàn)證參數(shù)。添加驗(yàn)證表達(dá)式需要 [ 參數(shù)名 ] 或者 [ 問號(hào) ] 后面添加管道符號(hào) [ | ] 。表達(dá)式中不能包含正斜杠符號(hào) [ / ] 。
url = "/blog/:post_id|^[0-9]+$/comments" - this will match /blog/10/comments ... url = "/blog/:post_id|^[0-9]+$" - this will match /blog/3 ... url = "/blog/:post_name?|^[a-z0-9-]+$" - this will match /blog/my-blog-post
可以通過在參數(shù)后面加星號(hào)來使用特殊的通配符參數(shù)。與常規(guī)參數(shù)不同,通配符參數(shù)可以匹配一個(gè)或多個(gè)URL。URL只能包含單個(gè)通配符參數(shù),不能使用正則表達(dá)式,或者后跟可選參數(shù)。
url = "/blog/:category*/:slug"
比如下面的例子:
/color/:color/make/:make*/edit 可以匹配: /color/brown/make/volkswagen/beetle/retro/edit 其中: color: 匹配了 brown make: 匹配了 volkswagen/beetle/retro
動(dòng)態(tài)頁(yè)面
在模板的Twig標(biāo)記部分,可以使用October提供的函數(shù),過濾器和標(biāo)簽。其中的變量在頁(yè)面中是必須的,這些變量在 page和layout中,由PHP代碼或者組件提供變量的值。
頁(yè)面執(zhí)行的聲明周期
onInit當(dāng)所有組件被初始化并且在處理AJAX請(qǐng)求之前,該函數(shù)被執(zhí)行。
onStart 函數(shù)在頁(yè)面開始執(zhí)行時(shí)執(zhí)行。
onEnd函數(shù)在頁(yè)面渲染之前和執(zhí)行頁(yè)面Components之后執(zhí)行。
在onStart和onEnd函數(shù)中,您可以將變量注入到Twig環(huán)境中。使用array notation將變量傳遞給頁(yè)面:
url = "/" == function onStart() { $this["hello"] = "Hello world!"; } =={{ hello }}
下面的例子說明了如何從數(shù)據(jù)庫(kù)加載文章的集合,并顯示在頁(yè)面上。
url = "/blog" == use AcmeBlogClassesPost; function onStart() { $this["posts"] = Post::orderBy("created_at", "desc")->get(); } ==Latest posts
發(fā)送自定義響應(yīng)
頁(yè)面執(zhí)行聲明周期中定義的所有函數(shù)都可以暫停執(zhí)行進(jìn)程,發(fā)送自定義的響應(yīng)。從生命周期函數(shù)中返回響應(yīng)是很簡(jiǎn)單的,下面的例子中,頁(yè)面將不載入任何頁(yè)面內(nèi)容,只是僅僅返回一個(gè)Hello world字符串到瀏覽器。
function onStart() { return "Hello world!"; }
比較有用的例子是做重定向:
public function onStart() { return Redirect::to("http://google.com"); }
Handling Forms
處理表單:可以在page或者layout中的PHP代碼部分定義處理表單的函數(shù)。使用form_open()函數(shù)來定義什么函數(shù)來處理這個(gè)表單。
{{ form_open({ request: "onHandleForm" }) }} Please enter a string: {{ form_close() }}Last submitted value: {{ lastValue }}
上述定義的來處理表單的函數(shù)為onHandleForm函數(shù),這個(gè)函數(shù)是在PHP代碼部分進(jìn)行定義的:
function onHandleForm() { $this["lastValue"] = post("value"); }
這個(gè)函數(shù)使用POST獲取表單提交的值,并把這個(gè)值給當(dāng)前頁(yè)面的變量 lastValue ,然后在上面的Twig代碼中的最后一行中,把這個(gè)值給顯示出來。
關(guān)于重名:如果在page、layout和component中定義了具有相同名稱的函數(shù),October將根據(jù)如下順序確定優(yōu)先級(jí):Page > Layout > Component??偸乔懊娴膬?yōu)先被執(zhí)行。
如果引用組件中的函數(shù),則使用組件名或者別名,后跟 [ :: ] ,再加函數(shù)名。
{{ form_open({ request: "myComponent::onHandleForm" }) }}
404 Page
當(dāng)系統(tǒng)找不到目標(biāo)頁(yè)面時(shí),系統(tǒng)將顯示404頁(yè)面內(nèi)容,URL為 /404 。
Error Page
默認(rèn)情況下,任何錯(cuò)誤都會(huì)顯示一個(gè)詳細(xì)的錯(cuò)誤頁(yè)面,其中包含錯(cuò)誤發(fā)生處的文件內(nèi)容,行號(hào)和堆棧跟蹤。
我們可以顯示一個(gè)自定義的錯(cuò)誤頁(yè)面。首先在配置文件config/app.php中找到字段debug,并設(shè)置為false。然后建立一個(gè)URL為:" /error "的頁(yè)面。
Page Variables
PHP/Component訪問:頁(yè)面的屬性可以被PHP代碼部分或者組件部分通過 $this->page 來進(jìn)行訪問。比如:
function onEnd() { $this->page->title = "A different page title"; }
Twig標(biāo)記訪問:這些變量也可以被Twig標(biāo)記訪問,方式為 this.page.variable ;
The title of this page is: {{ this.page.title }}
程序化方式注入資源到頁(yè)面
可以使用 addCss addJs 兩個(gè)方法,分別注入樣式表和js腳本到頁(yè)面中。只需要在頁(yè)面或者布局的PHP代碼部分,通過 onStart 函數(shù)進(jìn)行注入操作。
function onStart() { $this->addCss("assets/css/hello.css"); $this->addJs("assets/js/app.js"); }
關(guān)于路徑,如果以 / 開頭,則說明是網(wǎng)站的根目錄,如果不是 / 開頭,則是指主題目錄。同時(shí),這些路徑支持?jǐn)?shù)組模式,以便提供多個(gè)文件的注入。
function onStart() { $this->addCss(["assets/css/hello.css", "assets/css/goodbye.css"]); $this->addJs(["assets/js/app.js", "assets/js/nav.js"]); }
支持SCSS和LESS:
function onStart() { $this->addCss(["assets/less/base.less"]); }
注入的文件如何在頁(yè)面或者布局中輸出呢,通過 {% styles %} 和 {% scripts %}就可以了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28827.html
摘要:路由記憶名詞解釋在中后臺(tái)系統(tǒng)開發(fā)中,訪問任何頁(yè)面時(shí),認(rèn)證是永遠(yuǎn)繞不過的檻。這個(gè)過程,暫且稱之為路由記憶,前面例子中的登錄頁(yè)面稱之為記憶節(jié)點(diǎn)。 SPA 路由記憶 名詞解釋 在中后臺(tái)系統(tǒng)開發(fā)中,訪問任何頁(yè)面時(shí),認(rèn)證是永遠(yuǎn)繞不過的檻。以登錄為例,如果檢測(cè)出當(dāng)前用戶未登錄,會(huì)強(qiáng)制跳轉(zhuǎn)到登錄頁(yè)面提示用戶進(jìn)行登錄。登錄完成后,系統(tǒng)需要跳轉(zhuǎn)至用戶原先想訪問的頁(yè)面。這個(gè)過程,暫且稱之為路由記憶,前面例...
摘要:數(shù)據(jù)仍然是通過頁(yè)面獲得,頁(yè)面僅需向頁(yè)面?zhèn)鬟f即可,頁(yè)面拿到函數(shù)名,并通過傳遞從服務(wù)器拿到的數(shù)據(jù),在頁(yè)面執(zhí)行頁(yè)面的回調(diào)函數(shù),回調(diào)函數(shù)執(zhí)行完畢后移除頁(yè)面以及該函數(shù)。以上是我所知道的解決跨域請(qǐng)求的兩種方法。 iframe跨域的基本前提是,一個(gè)頁(yè)面可以嵌套非同源站點(diǎn)的html文件,以及某一個(gè)域名下的html頁(yè)面可以通過腳本向同域名服務(wù)器發(fā)出ajax請(qǐng)求。當(dāng)一個(gè)域名為domain1下的頁(yè)面A想要向...
摘要:在我們?nèi)粘5拈_發(fā)過程中,跳轉(zhuǎn)頁(yè)面是每個(gè)項(xiàng)目中必有的需求,包括監(jiān)聽返回按鈕,回到指定頁(yè)面,在小程序中頁(yè)面跳轉(zhuǎn)即頁(yè)面路由頁(yè)面??蚣芤詶5男问骄S護(hù)了當(dāng)前的所有頁(yè)面。 在我們?nèi)粘5拈_發(fā)過程中,跳轉(zhuǎn)頁(yè)面是每個(gè)項(xiàng)目中必有的需求,包括監(jiān)聽返回按鈕,回到指定頁(yè)面,在小程序中頁(yè)面跳轉(zhuǎn)即頁(yè)面路由 頁(yè)面棧 框架以棧的形式維護(hù)了當(dāng)前的所有頁(yè)面。當(dāng)發(fā)生路由切換的時(shí)候,頁(yè)面棧的表現(xiàn)如下: showImg(http...
閱讀 2253·2021-09-26 09:55
閱讀 3584·2021-09-23 11:22
閱讀 2151·2019-08-30 15:54
閱讀 1894·2019-08-28 18:03
閱讀 2591·2019-08-26 12:22
閱讀 3426·2019-08-26 12:20
閱讀 1723·2019-08-26 11:56
閱讀 2245·2019-08-23 15:30