F3-fatfree小型php框架教程(五)
看到这里我想再写一个helloworld的程序,不过这次的程序需要调用htm来实现,首先我们知道fatfree主要是以php为引擎的,我们定义一个template.htm文件:
<code><p>Hello, <?php echo $name; ?>!</p></code>
然后在主函数里面:
<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>
可以发现fatfree的变量都是以@符号开头的,而且框架会自动产生跟跟文件名一样的类,在这里是template,也就是文件的名字。
再举个例子,如果你定义了:
<code>$f3->set('buddy',array('Tom','Dick','Harry'));</code>
然后再在template里面写下:
<code><p>{{ @buddy[0] }}, {{ @buddy[1] }}, and {{ @buddy[2] }}</p></code>
{{
@buddy }}
的话,那么因为传输进来的是一个数组,所以输出的是‘Array’这个字符串。
文件里面的调用还支持一系列的操作:
<code>{{ 2*(@page-1) }} {{ (int)765.29+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>
<code><include if="{{ count(@items) >= 2 }}" href="items.htm" /></code>
注释:
<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>
条件语句:
<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>
<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>
当然也可以像之前那样判断类别:
<code><repeat group="{{ @fruits }}" value="{{ @fruit }}" counter="{{ @ctr }}"> <p class="{{ @ctr%2?'odd':'even' }}">{{ trim(@fruit) }}</p> </repeat></code>
字符编码:
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>
当然,上面这个代码只是给单一用户发送邮件的代码,但是我们经常要给一系列的用户发送邮件。所以就不能用这种简单的代码了。
我们可以用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'));

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

夏天雨后,经常能见到一种美丽且神奇的特殊天气景象——彩虹。这也是摄影中可遇而不可求的难得景象,非常出片。彩虹出现有这样几个条件:一是空气中有充足的水滴,二是太阳以较低的角度进行照射。所以下午雨过天晴后的一段时间内,是最容易看到彩虹的时候。不过彩虹的形成受天气、光线等条件的影响较大,因此一般只会持续一小段时间,而最佳观赏、拍摄时间更为短暂。那么遇到彩虹,怎样才能合理将其记录下来并拍出质感呢?1.寻找彩虹除了上面提到的条件外,彩虹通常出现在阳光照射的方向,即如果太阳由西向东照射,彩虹更有可能出现在东

评估Java框架商业支持的性价比涉及以下步骤:确定所需的保障级别和服务水平协议(SLA)保证。研究支持团队的经验和专业知识。考虑附加服务,如升级、故障排除和性能优化。权衡商业支持成本与风险缓解和提高效率。

虚拟市场的扩大,离不开虚拟货币的流通,自然也离不开虚拟货币转账问题。常见的转账错误就是地址复制错误,同样也有另一个错误就是链选择错误。虚拟币转错链依旧是一个棘手的问题,但基于转账操作的不熟练,新手转错连也时常发生,那么究竟虚拟币转错链怎么找回?转错连链可以通过第三方平台去找回,但并不一定会成功。接下来小编为大家详细说说,帮助大家更好的保管好自己的虚拟资产。虚拟币转错链怎么找回?虚拟币转错链的找回过程可能复杂且具有挑战性,但通过确认转账详情、联系交易所或钱包提供商、导入私钥到兼容钱包、使用跨链桥工

PHP框架的学习曲线取决于语言熟练度、框架复杂性、文档质量和社区支持。与Python框架相比,PHP框架的学习曲线更高,而与Ruby框架相比,则较低。与Java框架相比,PHP框架的学习曲线中等,但入门时间较短。

轻量级PHP框架通过小体积和低资源消耗提升应用程序性能。其特点包括:体积小,启动快,内存占用低提升响应速度和吞吐量,降低资源消耗实战案例:SlimFramework创建RESTAPI,仅500KB,高响应性、高吞吐量

在日常拍摄时,很多人遇到这种情况:相机上的照片看起来曝光正常,而将照片导出后发现其真实形态与相机的呈现效果相去甚远,曝光明显存在问题。受环境光线、屏幕亮度等因素的影响,这种情况是比较正常的,不过由此也给我们带来了一个启示:看照片、分析照片,一定要学会看直方图。那么,什么是直方图?简单地理解,直方图就是照片像素亮度分布的一种展示形态:横向来看,直方图大致可分为3个部分,左侧是阴影区域,中间为中间调部分,右侧为高光区域;最左侧是阴影中的死黑区域,而最右侧是高光中的溢出区域。纵向代表的是像素的具体分布

根据应用场景选择最佳Go框架:考虑应用类型、语言特性、性能需求、生态系统。常见Go框架:Gin(Web应用)、Echo(Web服务)、Fiber(高吞吐量)、gorm(ORM)、fasthttp(速度)。实战案例:构建RESTAPI(Fiber),与数据库交互(gorm)。选择框架:性能关键选fasthttp,灵活Web应用选Gin/Echo,数据库交互选gorm。

火币到币安转账指南:安全便捷地转移您的加密资产许多投资者同时使用火币和币安这两个知名的加密货币交易平台。本文将指导您如何安全地将火币(HTX)上的加密资产,例如TRUMP和USDT,转移到币安(Binance)平台。币安以其高安全性、丰富的币种和交易对以及全球领先的交易量而备受青睐。币安交易所的优势:全球第一的交易量,占据全球市场50%;储备资产透明,主要为比特币、以太坊和USDT等主流稳定币;已有效规避美国SEC的潜在风险,是目前最稳定可靠的交易所之一。本教程将以TRUMP和USDT为例,演
