fatfree-f3小型php框架(二)
2019独角兽企业重金招聘Python工程师标准>>>
我们的第一个例子不是太难懂吧,但是如果要做更多的功能与要求,我们就要在$f3 -> run()之前加一些别的路由:
<span style="font-size:18px;">$f3->route('GET /about',function() {echo 'Donations go to a local charity... us!';}
);</span>
如果你不想把全局的命名弄得太乱,fatfree有不同的映射路由的方法去管理面向对象的类与方法:
<span style="font-size:18px;">class WebPage {function display() {echo 'I cannot object to an object';}
}
$f3->route('GET /about','WebPage->display');</span>
http的要求同样也能路由到静态的类函数:
<span style="font-size:18px;">$f3->route('GET /login','Auth::login');</span>
路由和符号:
作为fatfree这样一门强大的特殊领域语言,可以指定单一的路由区控制不同的情况:
<span style="font-size:18px;">$f3->route('GET /brew/@count',function($f3) {echo $f3->get('PARAMS.count').' bottles of beer on the wall.';}
);</span>
上面这个例子给了一个变量@count ,代表这一个URL。也就是当我们输入URL之后带着像/brew/98(这个98就是给@count赋值为98)或者/brew/99这样子,然后这个98就会赋值给@count ,调用funtion去输出“98 bottles of beer on the wall”.
除了数字之外,这个@count还可以接受字符串,例如/brew/unbreakable然后就输出“unbreakable bottles of beer on the wall”.
还有另外一招:
<span style="font-size:18px;">$f3->route('GET /car/@count',function($f3,$params) {echo $params['count'].' cars.';}
);</span>
还有一个方法,用“*”来代替任何不重要的信息,例如:
<span style="font-size:18px;">$f3->route('GET /car/*',function() {echo 'We have enough cars.';}
);</span>
就是无论输入什么在/car/#$#%#@$#@%@都会得到那句话的。
如果要改变方法去别的网页,我们可以用这招:
<span style="font-size:18px;">$f3->route('GET|HEAD /go_google',function($f3) {$f3->reroute('http://www.google.com');}
);</span>
也就是说输入 http://localhost/go_google就可以跳转页面了。(注意,这些都是在index.php中定义的,进入文件夹后会自动搜index中的路由,会自动识别到底是路由还是文件夹的,别担心)
reroute方法就是跳转页面用的,而且前面同事用到了GET和HEAD要求,除此之外还有一个POST,这个大家可以了解一下他们的区别。
给路由命名:
当你定义一个路由的时候,你可以给路由命名。可以用代码中路由的名字和模板来替代URL的类型。如果你想要这么做就要在定义路由的地方顺便定义了路由的名字,for example
$f3->route('GET @beer_list: /beer', 'Beer->list');
同时要注意,路由的名字必须用php的命名规则。这个例子就说明了如果要定义变量都要以@为前缀然后用冒号来分隔。
然后调用的时候就要用到命名专属数组ALISASES,看一个调用的例子
<a href="{{@ALIASES.beer_list}}">view beer list</a>
( a href是超链接的意思,可以看看html的用法)
当然了这种用法还可以用来跳转页面,例如刚刚学的那个reroute函数:
$f3->reroute('@beer_list'); // note the single quotes
这次就不是跳转到google上了,而是跳转到“/beer”的页面上。
同时,我们常用的重载函数也适合这种情况,例子:
$f3->route('GET @beer_list: /beer/@country', 'Beer->bycountry');$f3->route('GET @beer_list: /beer/@country/@village', 'Beer->byvillage');// a set of key-value pairs is passed as argument to named route$f3->reroute('@beer_list(@country=Germany)');// if more than one token needed$f3->reroute('@beer_list(@country=Germany,@village=Rhine)');
这里就是把@beer_list这个变量重载了,当然调用的分别是bycountry和byvillage两个不同的函数,然后根据这两个方法的不同来分别给参数,第一个的参数是@country在/beer/@country里面定义了,然后给一个参数就是调用第一个bycountry方法的。如果给两个,自然就是调用下面那个。
转载于:https://my.oschina.net/u/123484/blog/312651
fatfree-f3小型php框架(二)相关推荐
- f3 fatfree小型php,F3-fatfree小型php框架课程(三)
F3-fatfree小型php框架教程(三) 之前说了很多路由的设定和使用,这里首先说一下根目录怎么定(所谓的根目录就是localhost的目录) 一般在安装apache的时候都会有默认目录,如果想改 ...
- 从头开始实现一个小型spring框架——手写Spring之集成Tomcat服务器
手写Spring之集成Tomcat与Servlet 写在前面 一.Web服务模型及servlet 1.1 Web服务器 1.2 请求流程 二.实现 三.小结 写在前面 最近学习了一下spring的相关 ...
- Redis源码分析之小型测试框架testhelp.h和redis-check-aof.c日志检测
使用的是redis 3.2版本 test中的文件主要分为以下几个: 1.memtest.c 内存检测 2.redis_benchmark.c 用于redis性能测试的实现,后续会当做单独的一个章节进行 ...
- Jersey框架二:Jersey对JSON的支持
Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...
- Java开源 J2EE框架(二)
Java开源 J2EE框架(二) 2007-01-06 12:34 Jofti [Java开源 其它开源项目] Jofti可对在缓存层中(支持EHCache,JBossCache和OSCache)的对 ...
- [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询
目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...
- pytest框架二次开发之自定义注解
目录 一.背景: 二.闭包与装饰器(可以跳过这一章) 2.1 .什么是闭包 2.2 闭包的用途 2.3 .装饰器(decorator) 三.pytest自定义注解@author 3.1 自定义注解@a ...
- 胖虎谈ImageLoader框架(二)
前言 从学校出来的这半年时间,发现很少有时间可以静下来学习和写博文了,为了保持着学习和分享的习惯,我准备之后每周抽出一部分时间为大家带来一个优秀的Android框架源码阅读后的理解系列博文. 期许:希 ...
- Spring框架(二)
Spring框架(二) 一.控制反转IOC和依赖注入DI 控制反转和依赖注入是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同.控制反转是说不需要程序员管理和控制bean,是解耦的目的,而 ...
- 利用jspxcms框架二次开发遇到的问题
发版之后里面的文件丢失问题 要在一个利用jspxcms框架二次开发的项目里添加新功能,拉下来代码加上新功能之后,把项目打成war包,放到服务器上重新启动,后来有别的开发人员告诉我,他以前上传的文件和一 ...
最新文章
- 志澄观察:卫星互联网——太空经济新动力
- 如何搜索国外上市企业的财务数据以及年报
- binostat matlab,MATLAB概率统计函数(2)
- create-react-app 脚手架构建项目,搬砖过程中持续总结心得
- django-rest-framework第一次使用使用常见问题
- 投标报价得分计算程序_什么是投标报价?怎么计算呢?
- Unity3D 多平台_预编译相关宏定义
- include virtual引入html文件,ASP文件引用include file和include virtual两种用法
- TensorFlow游乐场及神经网络简介
- 微信开发者工具安装使用SVN
- 计算机特殊社会环境,计算机应用职业生涯规划书
- 手机打开电脑html没有图片,jpg图片手机能看电脑打不开怎么办
- 操作系统与硬件、其他系统软件以及用户之间的关系
- 为什么热咖啡保温几小时后的变化比冰咖啡大?
- 电脑window medio player播放器可倍速播放
- 【技术干货】聊聊在大厂推荐场景中embedding都是怎么做的
- 随机算法 之随机数的产生
- 使用PM进行硬盘分区
- mysql外码内码定义_刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系...
- 《Linguistic Regularities in Continuous Space Word Representations》翻译与理解
热门文章
- tomcat 配置 使用 HTTPS
- tomcat启动卡死在: Initializing Spring root WebApplicationContext的解决办法
- mysql半同步复制问题排查
- [CSAPP笔记][第一章计算机系统漫游]
- linux中文件描述符fd和文件指针flip的理解
- 玩转车联网1---初识OBD和行车助手
- VC++中使用MFC通过ADO连接数据库
- 了解你所不知道的SMON功能(一):清理临时段
- 在SQLMAP中使用动态SQL
- Arm architecture 第一章