Heim 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>
Nach dem Login kopieren
注意,这里的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>
Nach dem Login kopieren

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


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

<code><p>Hello, {{ @name }}!</p></code>
Nach dem Login kopieren
<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>
Nach dem Login kopieren
变动就是new的类不同和文件中变量的引用不同。

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

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

<code>$f3->set('buddy',array('Tom','Dick','Harry'));</code>
Nach dem Login kopieren

然后再在template里面写下:

<code><p>{{ @buddy[0] }}, {{ @buddy[1] }}, and {{ @buddy[2] }}</p></code>
Nach dem Login kopieren
就可以输出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>
Nach dem Login kopieren
只要你源文件里面给这些变量定义完全了,这些操作都是有效的。

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

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

<code>{{ @func('hello','world') }}</code>
Nach dem Login kopieren

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

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

<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>
Nach dem Login kopieren
然后:

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

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



注释:

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

<code>{* <p>A chunk of HTML we don't want displayed at the moment</p> *}</code>
Nach dem Login kopieren
都是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>
Nach dem Login kopieren
跟ifelse一样,这里就不说了,但是如果不写false那就全部默认为true:

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


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

首先定义:

<code>$f3->set('fruits',array('apple','orange ',' banana'));</code>
Nach dem Login kopieren
然后文件中

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

<code><p>apple</p>
<p>orange</p>
<p>banana</p></code>
Nach dem Login kopieren

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

定义:

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

<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>
Nach dem Login kopieren
输出:

<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>
Nach dem Login kopieren
现在发现挺好用了吧,然后要说明一下,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>
Nach dem Login kopieren
如果ctr是奇数就进odd类,如果是偶数就是even类


字符编码:

UTF-8:

<code>$f3->set('ENCODING','ISO-8859-1');</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren
我们的定义:

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


















Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Im Sommer müssen Sie unbedingt versuchen, einen Regenbogen zu schießen Im Sommer müssen Sie unbedingt versuchen, einen Regenbogen zu schießen Jul 21, 2024 pm 05:16 PM

Nach dem Regen im Sommer können Sie oft ein wunderschönes und magisches besonderes Wetterbild sehen – den Regenbogen. Dies ist auch eine seltene Szene, die man in der Fotografie antreffen kann, und sie ist sehr fotogen. Für das Erscheinen eines Regenbogens gibt es mehrere Bedingungen: Erstens sind genügend Wassertröpfchen in der Luft und zweitens scheint die Sonne in einem niedrigeren Winkel. Daher ist es am einfachsten, einen Regenbogen am Nachmittag zu sehen, nachdem der Regen nachgelassen hat. Allerdings wird die Bildung eines Regenbogens stark von Wetter, Licht und anderen Bedingungen beeinflusst, sodass sie im Allgemeinen nur von kurzer Dauer ist und die beste Betrachtungs- und Aufnahmezeit sogar noch kürzer ist. Wenn Sie also auf einen Regenbogen stoßen, wie können Sie ihn dann richtig aufzeichnen und qualitativ hochwertige Fotos machen? 1. Suchen Sie nach Regenbögen. Zusätzlich zu den oben genannten Bedingungen erscheinen Regenbögen normalerweise in Richtung des Sonnenlichts, das heißt, wenn die Sonne von Westen nach Osten scheint, ist es wahrscheinlicher, dass Regenbögen im Osten erscheinen.

So bewerten Sie die Kosteneffizienz der kommerziellen Unterstützung für Java-Frameworks So bewerten Sie die Kosteneffizienz der kommerziellen Unterstützung für Java-Frameworks Jun 05, 2024 pm 05:25 PM

Die Bewertung des Kosten-/Leistungsverhältnisses des kommerziellen Supports für ein Java-Framework umfasst die folgenden Schritte: Bestimmen Sie das erforderliche Maß an Sicherheit und Service-Level-Agreement-Garantien (SLA). Die Erfahrung und das Fachwissen des Forschungsunterstützungsteams. Erwägen Sie zusätzliche Services wie Upgrades, Fehlerbehebung und Leistungsoptimierung. Wägen Sie die Kosten für die Geschäftsunterstützung gegen Risikominderung und Effizienzsteigerung ab.

Wie kann ich die falsche Kette virtueller Währungen abrufen? Tutorial zum Abrufen der falschen Kette einer virtuellen Währungsübertragung Wie kann ich die falsche Kette virtueller Währungen abrufen? Tutorial zum Abrufen der falschen Kette einer virtuellen Währungsübertragung Jul 16, 2024 pm 09:02 PM

Die Ausweitung des virtuellen Marktes ist untrennbar mit der Zirkulation virtueller Währungen verbunden, und natürlich ist sie auch untrennbar mit der Frage der virtuellen Währungstransfers verbunden. Ein häufiger Übertragungsfehler ist der Adresskopiefehler und ein weiterer Fehler ist der Kettenauswahlfehler. Der Transfer virtueller Währungen in die falsche Kette ist immer noch ein heikles Problem, aber aufgrund des ungeschickten Transfervorgangs übertragen Anfänger oft die falsche Kette. Wie kann man also die falsche Kette virtueller Währungen wiederherstellen? Der falsche Link kann über eine Drittanbieterplattform abgerufen werden, ist jedoch möglicherweise nicht erfolgreich. Als Nächstes informiert Sie der Redakteur ausführlich darüber, wie Sie Ihre virtuellen Vermögenswerte besser verwalten können. Wie kann ich die falsche Kette virtueller Währungen abrufen? Der Prozess des Abrufens virtueller Währungen, die an die falsche Kette übertragen wurden, kann kompliziert und herausfordernd sein, aber durch die Bestätigung der Übertragungsdetails, die Kontaktaufnahme mit der Börse oder dem Wallet-Anbieter, den Import des privaten Schlüssels in eine kompatible Wallet und die Verwendung des Cross-Chain-Bridge-Tools

Wie wirken sich die Lightweight-Optionen von PHP-Frameworks auf die Anwendungsleistung aus? Wie wirken sich die Lightweight-Optionen von PHP-Frameworks auf die Anwendungsleistung aus? Jun 06, 2024 am 10:53 AM

Das leichte PHP-Framework verbessert die Anwendungsleistung durch geringe Größe und geringen Ressourcenverbrauch. Zu seinen Merkmalen gehören: geringe Größe, schneller Start, geringer Speicherverbrauch, verbesserte Reaktionsgeschwindigkeit und Durchsatz sowie reduzierter Ressourcenverbrauch. Praktischer Fall: SlimFramework erstellt eine REST-API, nur 500 KB, hohe Reaktionsfähigkeit und hoher Durchsatz

So wählen Sie das beste Golang-Framework für verschiedene Anwendungsszenarien aus So wählen Sie das beste Golang-Framework für verschiedene Anwendungsszenarien aus Jun 05, 2024 pm 04:05 PM

Wählen Sie das beste Go-Framework basierend auf Anwendungsszenarien aus: Berücksichtigen Sie Anwendungstyp, Sprachfunktionen, Leistungsanforderungen und Ökosystem. Gängige Go-Frameworks: Gin (Webanwendung), Echo (Webdienst), Fiber (hoher Durchsatz), gorm (ORM), fasthttp (Geschwindigkeit). Praktischer Fall: Erstellen einer REST-API (Fiber) und Interaktion mit der Datenbank (gorm). Wählen Sie ein Framework: Wählen Sie fasthttp für die Schlüsselleistung, Gin/Echo für flexible Webanwendungen und gorm für die Datenbankinteraktion.

Wie ist die Lernkurve von PHP-Frameworks im Vergleich zu anderen Sprach-Frameworks? Wie ist die Lernkurve von PHP-Frameworks im Vergleich zu anderen Sprach-Frameworks? Jun 06, 2024 pm 12:41 PM

Die Lernkurve eines PHP-Frameworks hängt von Sprachkenntnissen, Framework-Komplexität, Dokumentationsqualität und Community-Unterstützung ab. Die Lernkurve von PHP-Frameworks ist im Vergleich zu Python-Frameworks höher und im Vergleich zu Ruby-Frameworks niedriger. Im Vergleich zu Java-Frameworks haben PHP-Frameworks eine moderate Lernkurve, aber eine kürzere Einstiegszeit.

Warum muss man Histogramme kennen, um Fotografie zu lernen? Warum muss man Histogramme kennen, um Fotografie zu lernen? Jul 20, 2024 pm 09:20 PM

Beim täglichen Fotografieren stoßen viele Menschen auf diese Situation: Die Fotos auf der Kamera scheinen normal belichtet zu sein, aber nach dem Exportieren der Fotos stellen sie fest, dass ihre wahre Form weit von der Wiedergabe der Kamera entfernt ist, und es liegt offensichtlich ein Belichtungsproblem vor. Beeinflusst durch Umgebungslicht, Bildschirmhelligkeit und andere Faktoren ist diese Situation relativ normal, bringt uns aber auch eine Offenbarung: Wenn Sie Fotos betrachten und Fotos analysieren, müssen Sie lernen, Histogramme zu betrachten. Was ist also ein Histogramm? Einfach ausgedrückt ist ein Histogramm eine Darstellungsform der Helligkeitsverteilung von Fotopixeln: Horizontal lässt sich das Histogramm grob in drei Teile unterteilen, die linke Seite ist der Schattenbereich, die Mitte ist der Mitteltonbereich und die rechte Seite ist der Hervorhebungsbereich; Auf der linken Seite befindet sich der tote schwarze Bereich in den Schatten, während sich ganz rechts der verschüttete Bereich in den Lichtern befindet. Die vertikale Achse stellt die spezifische Pixelverteilung dar

Stable Diffusion 3-Konstruktions-Tutorial und offizielle Beispieldemonstration, GALAXY GeForce RTX 4070 Ti SUPER Xingyao OC läuft im Handumdrehen auf Hochtouren Stable Diffusion 3-Konstruktions-Tutorial und offizielle Beispieldemonstration, GALAXY GeForce RTX 4070 Ti SUPER Xingyao OC läuft im Handumdrehen auf Hochtouren Jun 24, 2024 am 05:59 AM

Als neueste Version des KI-Bildgenerierungsmodells sind die Erwartungen an StableDiffusion3 groß. Ich glaube, dass viele Freunde das Bildgenerierungsmodell mehr oder weniger in der Arbeit und im Leben verwendet haben, also lassen Sie uns unten einen Blick darauf werfen Hier finden Sie ohne weitere Umschweife die praktischen Informationen. Die in diesem Build verwendete Plattformkonfiguration ist wie folgt: Angesichts des hohen Bedarfs an Rechenleistung bei der lokalen Ausführung von Stablediffusion3 haben wir uns dieses Mal für die GALAXY GeForceRTX4070TiSUPER Xingyao OC-Grafikkarte entschieden. GEFORCERTX4070TiSUPER basiert auf dem AD103-Kern und ist zugleich die größte Grafikkarte dieser Art.

See all articles