文档章节

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

诺灬晓月
 诺灬晓月
发布于 2014/09/12 00:14
字数 1358
阅读 206
收藏 0

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

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

然后在主函数里面:

$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();

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


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

<p>Hello, {{ @name }}!</p>
$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();
变动就是new的类不同和文件中变量的引用不同。

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

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

$f3->set('buddy',array('Tom','Dick','Harry'));

然后再在template里面写下:

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

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

{{ 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 }}
只要你源文件里面给这些变量定义完全了,这些操作都是有效的。

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

$f3->set('func',
    function($a,$b) {
        return $a.', '.$b;
    });
定义完之后就可以调用了:

{{ @func('hello','world') }}

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

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

// 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');
然后:

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

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



注释:

<exclude>
    <p>A chunk of HTML we don't want displayed at the moment</p></exclude>
还有

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


条件语句:

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

<check if="{{ @loggedin }}">
    <p>HTML chunk to be included if condition is true</p></check>


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

首先定义:

$f3->set('fruits',array('apple','orange ',' banana'));
然后文件中

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

<p>apple</p><p>orange</p><p>banana</p>

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

定义:

$f3->set('div',
    array(
        'coffee'=>array('arabica','barako','liberica','kopiluwak'),
        'tea'=>array('darjeeling','pekoe','samovar')
    ));
然后文件中:

<repeat group="{{ @div }}" key="{{ @ikey }}" value="{{ @idiv }}">
    <div>
        <p><span><b>{{ @ikey }}</b></span></p>
        <p>
        <repeat group="{{ @idiv }}" value="{{ @ispan }}">
            <span>{{ @ispan }}</span>
        </repeat>
        </p>
    </div></repeat>
输出:

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


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

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


字符编码:

UTF-8:

$f3->set('ENCODING','ISO-8859-1');

email模板:

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

welcome.txt文件里面是这样的

MIME-Version: 1.0
Content-type: text/html; charset={{ @ENCODING }}
From: {{ @from }}
To: {{ @to }}
Subject: {{ @subject }}<p>Welcome, and thanks for joining {{ @site }}!</p>
我们的定义:

$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'));
这里有两个比较陌生的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'));

本文转载自:http://blog.csdn.net/modiziri/article/details/22927607

诺灬晓月
粉丝 8
博文 20
码字总数 2067
作品 0
武汉
程序员
私信 提问
fatfree-f3小型php框架教程(四)

这里还有一个重要的说明, $f3->route('GET /','Main->home'); 这是一个动态的函数调用,但是在调用home函数之前,f3会寻找一个叫做beforeRoute()的函数并且调用它,如果你定义了的话。然后调...

诺灬晓月
2014/09/12
429
0
fatfree-f3小型php框架(二)

我们的第一个例子不是太难懂吧,但是如果要做更多的功能与要求,我们就要在$f3 -> run()之前加一些别的路由: <span style="font-size:18px;">$f3->route('GET /about', function() { echo '......

诺灬晓月
2014/09/12
472
0
fatfree-f3小型php框架(一)

概要:f3 跟zend fleaphp 等框架不一样,f3 是一个小型框架,很适合新手学习和使用。f3框架 配备了一个快速的并且容易使用的模板引擎。f3 的model 同时与f3 的数据映射 和 sql 工具 用多样的...

穆子淼
2015/07/09
134
0
F3-fatfree小型php框架教程(六)数据库篇

既然是讲数据库的,那首先自然是连接数据库了。 这里举两个例子,mysql数据库: $db=new DBSQL( 'mysql:host=localhost;port=3306;dbname=mysqldb', 'admin', 'p455w0rD'); sqlite数据库: ......

诺灬晓月
2014/09/12
248
0
fatfree-f3小型php框架(一)

梗概:f3跟zend,fleaPHP等框架不一样,f3是一个小型框架,很适合新手学习和使用。f3框架配备了一个快速并且容易使用的模板引擎。f3的model同时与f3的数据映射和sql工具用多样的数据库引擎来做...

诺灬晓月
2014/09/12
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

前端面试题汇总

一. HTML常见的兼容性 1.HTML5 标签在低版本浏览器不兼容 解决办法:使用html5shiv库,引入下列语句 <!--[if lte IE 8]> <script src="https://cdn.bootcss.com/html5shiv/r29/html5.js"></sc......

蓝小驴
32分钟前
7
0
OSChina 周四乱弹 —— 我气的脸都黑了!

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 小小编辑推荐《Red Battle》- 高橋李依 / 豊崎愛生 《Red Battle》- 高橋李依 / 豊崎愛生 手机党少年们想听歌,请使劲儿戳(这里) @丶Lion ...

小小编辑
45分钟前
598
22
找OSG教程, B站就有

https://www.bilibili.com/video/av64849038?from=search&seid=11632913960900279653

洛克人杰洛
今天
5
0
学习记录(day07-Vue组件、自定义属性、自定义事件)

[TOC] 1.1.1什么是组件 一个vue文件就是一个组件 组件将html标签/css样式/对应JS打包成一个整体,也可以理解钻进一个具有样式和特效的自定义标签。 一、编写组件(提供方)<template> <di...

庭前云落
今天
5
0
使用Prometheus监控SpringBoot应用

通过之前的文章我们使用Prometheus监控了应用服务器node_exporter,数据库mysqld_exporter,今天我们来监控一下你的应用。(本文以SpringBoot 2.1.9.RELEASE 作为监控目标) 编码 添加依赖 使...

JAVA日知录
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部