首頁 php教程 php手册 F3-fatfree小型php框架教程(五)

F3-fatfree小型php框架教程(五)

Jun 13, 2016 am 09:37 AM
教學 框架

看到这里我想再写一个helloworld的程序,不过这次的程序需要调用htm来实现,首先我们知道fatfree主要是以php为引擎的,我们定义一个template.htm文件:

<code><p>Hello, <?php echo $name; ?>!</p></code>
登入後複製
注意,这里的name是还没初始化的变量

然后在主函数里面:

<code>$f3=require('lib/base.php');
$f3->route('GET /',
    function($f3) {
        $f3->set('name','world');
        $view=new View;
        echo $view->render('template.htm');
        // Previous two lines can be shortened to:
        // echo View::instance()->render('template.htm');
    }
);
$f3->run();</code>
登入後複製

这里面的view是内置对象,用于调用htm文件,然后这里给name初始化了然后调用template,输出helloworld,应该没什么问题。


这里也有另外一种fatfree本身的模板,格式是:

<code><p>Hello, {{ @name }}!</p></code>
登入後複製
<code>$f3=require('lib/base.php');
$f3->route('GET /',
    function($f3) {
        $f3->set('name','world');
        $template=new Template;
        echo $template->render('template.htm');
        // Above lines can be written as:
        // echo Template::instance()->render('template.htm');
    }
);
$f3->run();</code>
登入後複製
变动就是new的类不同和文件中变量的引用不同。

可以发现fatfree的变量都是以@符号开头的,而且框架会自动产生跟跟文件名一样的类,在这里是template,也就是文件的名字。

再举个例子,如果你定义了:

<code>$f3->set('buddy',array('Tom','Dick','Harry'));</code>
登入後複製

然后再在template里面写下:

<code><p>{{ @buddy[0] }}, {{ @buddy[1] }}, and {{ @buddy[2] }}</p></code>
登入後複製
就可以输出buddy的数组元素了,但是如果你只在文件里写 {{ @buddy }}的话,那么因为传输进来的是一个数组,所以输出的是‘Array’这个字符串。

文件里面的调用还支持一系列的操作:

<code>{{ 2*(@page-1) }}
{{ (int)765.29&#43;1.2e3 }}
<option value="F" {{ @active?'selected="selected"':'' }}>Female</option>
{{ var_dump(@xyz) }}
<p>That is {{ preg_match('/Yes/i',@response)?'correct':'wrong' }}!</p>
{{ @obj->property }}</code>
登入後複製
只要你源文件里面给这些变量定义完全了,这些操作都是有效的。

还有fatfree里面给函数定义是这样的:

<code>$f3->set('func',
    function($a,$b) {
        return $a.', '.$b;
    }
);</code>
登入後複製
定义完之后就可以调用了:

<code>{{ @func('hello','world') }}</code>
登入後複製

还有一招在文件里面调用另外一个文件:

<code><include href="header.htm" /></code>
登入後複製
如果你怕麻烦也可以用变量的形式调用,首先:

<code>// switch content to your blog sub-template
$f3->set('content','blog.htm');
// in another route, switch content to the wiki sub-template
$f3->set('content','wiki.htm');</code>
登入後複製
然后:

<code><include href="{{ @content }}" /></code>
登入後複製
而且这个include还可以设置为有条件限制的:

<code><include if="{{ count(@items) >= 2 }}" href="items.htm" /></code>
登入後複製
这里的count是计算@items数组的元素,这里就不详细说了。



注释:

<code><exclude>
    <p>A chunk of HTML we don't want displayed at the moment</p>
</exclude></code>
登入後複製
还有

<code>{* <p>A chunk of HTML we don't want displayed at the moment</p> *}</code>
登入後複製
都是fatfree里面的注释。


条件语句:

<code><check if="{{ @page=='Home' }}">
    <false><span>Inserted if condition is false</span></false>
</check>
<check if="{{ @gender=='M' }}">
    <true>
        <p>Appears when condition is true</p>
    </true>
    <false>
        <p>Appears when condition is false</p>
    </false>
</check></code>
登入後複製
跟ifelse一样,这里就不说了,但是如果不写false那就全部默认为true:

<code><check if="{{ @loggedin }}">
    <p>HTML chunk to be included if condition is true</p>
</check></code>
登入後複製


然后说一个数组输出的方法:

首先定义:

<code>$f3->set('fruits',array('apple','orange ',' banana'));</code>
登入後複製
然后文件中

<code><repeat group="{{ @fruits }}" value="{{ @ifruit }}">
    <p>{{ trim(@ifruit) }}</p>
</repeat></code>
登入後複製
这样就可以出来效果:

<code><p>apple</p>
<p>orange</p>
<p>banana</p></code>
登入後複製

然后我们来个复杂的例子:

定义:

<code>$f3->set('div',
    array(
        'coffee'=>array('arabica','barako','liberica','kopiluwak'),
        'tea'=>array('darjeeling','pekoe','samovar')
    )
);</code>
登入後複製
然后文件中:

<code><repeat group="{{ @div }}" key="{{ @ikey }}" value="{{ @idiv }}">
    <p>
        <p><span><b>{{ @ikey }}</b></span></p>
        <p>
        <repeat group="{{ @idiv }}" value="{{ @ispan }}">
            <span>{{ @ispan }}</span>
        </repeat>
        </p>
    </p>
</repeat></code>
登入後複製
输出:

<code><p>
    <p><span><b>coffee</b></span></p>
    <p>
        <span>arabica</span>
        <span>barako</span>
        <span>liberica</span>
        <span>kopiluwak</span>
    <p>
</p>
<p>
    <p><span><b>tea</b></span></p>
    <p>
        <span>darjeeling</span>
        <span>pekoe</span>
        <span>samovar</span>
    </p>
</p></code>
登入後複製
现在发现挺好用了吧,然后要说明一下,key对应的值是数组当前指针(多维才适用),value对应的值是数组的值,会根据要求罗列出来。而且如果定义的数组是多维的,例如上面那个div -> coffee -> arabica这个二维数组,repeat也要调用两次,第一次的repeat是进入coffee的第一层,然后第二次调用进入arabica这一层,key对应的就是当时的指针。


当然也可以像之前那样判断类别:

<code><repeat group="{{ @fruits }}" value="{{ @fruit }}" counter="{{ @ctr }}">
    <p class="{{ @ctr%2?'odd':'even' }}">{{ trim(@fruit) }}</p>
</repeat></code>
登入後複製
如果ctr是奇数就进odd类,如果是偶数就是even类


字符编码:

UTF-8:

<code>$f3->set('ENCODING','ISO-8859-1');</code>
登入後複製

email模板:

首先下面先说一下email的逻辑定义:

welcome.txt文件里面是这样的

<code>MIME-Version: 1.0
Content-type: text/html; charset={{ @ENCODING }}
From: {{ @from }}
To: {{ @to }}
Subject: {{ @subject }}

<p>Welcome, and thanks for joining {{ @site }}!</p></code>
登入後複製
我们的定义:

<code>$f3->set('from','<no-reply@mysite.com>');
$f3->set('to','<slasher@throats.com>');
$f3->set('subject','Welcome');
ini_set('sendmail_from',$f3->get('from'));
mail(
    $f3->get('to'),
    $f3->get('subject'),
    Template::instance()->render('email.txt','text/html')
);</code>
登入後複製
这里有两个比较陌生的php函数,ini_php函数是用来修改php.ini基本配置文件的函数,但是会在脚本运行结束后恢复。而mail函数是php内置的核心函数,不需要额外安装,也就是发email的,这里是简单的使用模式,分别是接收者,主题,内容。但是要注意,发送成功不表示对方一定会接收到。


当然,上面这个代码只是给单一用户发送邮件的代码,但是我们经常要给一系列的用户发送邮件。所以就不能用这种简单的代码了。

我们可以用smtp的类来发送:教程

$mail=new SMTP('smtp.gmail.com',465,'SSL','account@gmail.com','secret');
$mail->set('from','<no-reply@mysite.com>');
$mail->set('to','"Slasher" <slasher@throats.com>');
$mail->set('subject','Welcome');
$mail->send(Template::instance()->render('email.txt'));
登入後複製


















本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

夏天,一定要試試拍攝彩虹 夏天,一定要試試拍攝彩虹 Jul 21, 2024 pm 05:16 PM

夏天雨後,常常能見到美麗又神奇的特殊天氣景象-彩虹。這也是攝影中可遇而不可求的難得景象,非常出片。彩虹出現有這樣幾個條件:一是空氣中有充足的水滴,二是太陽以較低的角度照射。所以下午雨過天晴後的一段時間內,是最容易看到彩虹的時候。不過彩虹的形成受天氣、光線等條件的影響較大,因此一般只會持續一小段時間,而最佳觀賞、拍攝時間更為短暫。那麼遇到彩虹,怎樣才能合理地記錄下來並拍出質感呢? 1.尋找彩虹除了上面提到的條件外,彩虹通常出現在陽光照射的方向,即如果太陽由西向東照射,彩虹更有可能出現在東

如何評估Java框架商業支援的性價比 如何評估Java框架商業支援的性價比 Jun 05, 2024 pm 05:25 PM

評估Java框架商業支援的性價比涉及以下步驟:確定所需的保障等級和服務等級協定(SLA)保證。研究支持團隊的經驗和專業知識。考慮附加服務,如昇級、故障排除和效能最佳化。權衡商業支援成本與風險緩解和提高效率。

虛擬幣轉錯鏈怎麼找回來?虛擬幣轉錯鏈找回操作教程 虛擬幣轉錯鏈怎麼找回來?虛擬幣轉錯鏈找回操作教程 Jul 16, 2024 pm 09:02 PM

虛擬市場的擴大,離不開虛擬貨幣的流通,自然離不開虛擬貨幣轉帳問題。常見的轉帳錯誤就是位址複製錯誤,同樣也有另一個錯誤就是鏈選擇錯誤。虛擬幣轉錯鏈依舊是個棘手的問題,但基於轉帳操作的不熟練,新手轉錯連也時常發生,那麼究竟虛擬幣轉錯鏈怎麼找回?轉錯連鏈可以透過第三方平台去找回,但不一定會成功。接下來小編為大家詳細說說,幫助大家更好的保管自己的虛擬資產。虛擬幣轉錯鏈怎麼找回來?虛擬幣轉錯鏈的找回過程可能複雜且具有挑戰性,但透過確認轉帳詳情、聯絡交易所或錢包提供者、匯入私鑰到相容錢包、使用跨鏈橋工

PHP 框架的學習曲線與其他語言框架相比如何? PHP 框架的學習曲線與其他語言框架相比如何? Jun 06, 2024 pm 12:41 PM

PHP框架的學習曲線取決於語言熟練度、框架複雜性、文件品質和社群支援。與Python框架相比,PHP框架的學習曲線較高,而與Ruby框架相比,則較低。與Java框架相比,PHP框架的學習曲線中等,但入門時間較短。

PHP 框架的輕量級選項如何影響應用程式效能? PHP 框架的輕量級選項如何影響應用程式效能? Jun 06, 2024 am 10:53 AM

輕量級PHP框架透過小體積和低資源消耗提升應用程式效能。其特點包括:體積小,啟動快,記憶體佔用低提升響應速度和吞吐量,降低資源消耗實戰案例:SlimFramework創建RESTAPI,僅500KB,高響應性、高吞吐量

為什麼學攝影一定要會看直方圖? 為什麼學攝影一定要會看直方圖? Jul 20, 2024 pm 09:20 PM

在日常拍攝時,許多人遇到這種情況:相機上的照片看起來曝光正常,而將照片導出後發現其真實形態與相機的呈現效果相去甚遠,曝光明顯存在問題。受環境光線、螢幕亮度等因素的影響,這種情況是比較正常的,不過也為我們帶來了一個啟示:看照片、分析照片,一定要學會看直方圖。那麼,什麼是直方圖呢?簡單理解,直方圖就是照片像素亮度分佈的一種展示形態:橫向來看,直方圖大致可分為3個部分,左側是陰影區域,中間為中間調部分,右側為高光區域;最左側是陰影中的死黑區域,而最右側是高光中的溢出區域。縱向代表的是像素的具體分佈

如何為不同的應用場景選擇最佳的golang框架 如何為不同的應用場景選擇最佳的golang框架 Jun 05, 2024 pm 04:05 PM

根據應用場景選擇最佳Go框架:考慮應用類型、語言特性、效能需求、生態系統。常見Go框架:Gin(Web應用)、Echo(Web服務)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。實戰案例:建構RESTAPI(Fiber),與資料庫互動(gorm)。選擇框架:效能關鍵選fasthttp,靈活Web應用選Gin/Echo,資料庫互動選gorm。

火幣怎麼轉幣到幣安?如何把HTX裡面的加密資產提到幣安平台? 火幣怎麼轉幣到幣安?如何把HTX裡面的加密資產提到幣安平台? Mar 03, 2025 pm 08:51 PM

火幣到幣安轉賬指南:安全便捷地轉移您的加密資產許多投資者同時使用火幣和幣安這兩個知名的加密貨幣交易平台。本文將指導您如何安全地將火幣(HTX)上的加密資產,例如TRUMP和USDT,轉移到幣安(Binance)平台。幣安以其高安全性、豐富的幣種和交易對以及全球領先的交易量而備受青睞。幣安交易所的優勢:全球第一的交易量,佔據全球市場50%;儲備資產透明,主要為比特幣、以太坊和USDT等主流穩定幣;已有效規避美國SEC的潛在風險,是目前最穩定可靠的交易所之一。本教程將以TRUMP和USDT為例,演

See all articles