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框架(二)相关推荐

  1. f3 fatfree小型php,F3-fatfree小型php框架课程(三)

    F3-fatfree小型php框架教程(三) 之前说了很多路由的设定和使用,这里首先说一下根目录怎么定(所谓的根目录就是localhost的目录) 一般在安装apache的时候都会有默认目录,如果想改 ...

  2. 从头开始实现一个小型spring框架——手写Spring之集成Tomcat服务器

    手写Spring之集成Tomcat与Servlet 写在前面 一.Web服务模型及servlet 1.1 Web服务器 1.2 请求流程 二.实现 三.小结 写在前面 最近学习了一下spring的相关 ...

  3. Redis源码分析之小型测试框架testhelp.h和redis-check-aof.c日志检测

    使用的是redis 3.2版本 test中的文件主要分为以下几个: 1.memtest.c 内存检测 2.redis_benchmark.c 用于redis性能测试的实现,后续会当做单独的一个章节进行 ...

  4. Jersey框架二:Jersey对JSON的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  5. Java开源 J2EE框架(二)

    Java开源 J2EE框架(二) 2007-01-06 12:34 Jofti [Java开源 其它开源项目] Jofti可对在缓存层中(支持EHCache,JBossCache和OSCache)的对 ...

  6. [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询

    目录 [LINQ2Dapper]最完整Dapper To Linq框架(一)---基础查询 [LINQ2Dapper]最完整Dapper To Linq框架(二)---动态化查询 [LINQ2Dapp ...

  7. pytest框架二次开发之自定义注解

    目录 一.背景: 二.闭包与装饰器(可以跳过这一章) 2.1 .什么是闭包 2.2 闭包的用途 2.3 .装饰器(decorator) 三.pytest自定义注解@author 3.1 自定义注解@a ...

  8. 胖虎谈ImageLoader框架(二)

    前言 从学校出来的这半年时间,发现很少有时间可以静下来学习和写博文了,为了保持着学习和分享的习惯,我准备之后每周抽出一部分时间为大家带来一个优秀的Android框架源码阅读后的理解系列博文. 期许:希 ...

  9. Spring框架(二)

    Spring框架(二) 一.控制反转IOC和依赖注入DI 控制反转和依赖注入是对同一件事情的不同描述,从某个方面讲,就是它们描述的角度不同.控制反转是说不需要程序员管理和控制bean,是解耦的目的,而 ...

  10. 利用jspxcms框架二次开发遇到的问题

    发版之后里面的文件丢失问题 要在一个利用jspxcms框架二次开发的项目里添加新功能,拉下来代码加上新功能之后,把项目打成war包,放到服务器上重新启动,后来有别的开发人员告诉我,他以前上传的文件和一 ...

最新文章

  1. 志澄观察:卫星互联网——太空经济新动力
  2. 如何搜索国外上市企业的财务数据以及年报
  3. binostat matlab,MATLAB概率统计函数(2)
  4. create-react-app 脚手架构建项目,搬砖过程中持续总结心得
  5. django-rest-framework第一次使用使用常见问题
  6. 投标报价得分计算程序_什么是投标报价?怎么计算呢?
  7. Unity3D 多平台_预编译相关宏定义
  8. include virtual引入html文件,ASP文件引用include file和include virtual两种用法
  9. TensorFlow游乐场及神经网络简介
  10. 微信开发者工具安装使用SVN
  11. 计算机特殊社会环境,计算机应用职业生涯规划书
  12. 手机打开电脑html没有图片,jpg图片手机能看电脑打不开怎么办
  13. 操作系统与硬件、其他系统软件以及用户之间的关系
  14. 为什么热咖啡保温几小时后的变化比冰咖啡大?
  15. 电脑window medio player播放器可倍速播放
  16. 【技术干货】聊聊在大厂推荐场景中embedding都是怎么做的
  17. 随机算法 之随机数的产生
  18. 使用PM进行硬盘分区
  19. mysql外码内码定义_刨根究底字符编码之六——简体汉字编码中区位码、国标码、内码、外码、字形码的区别及关系...
  20. 《Linguistic Regularities in Continuous Space Word Representations》翻译与理解

热门文章

  1. tomcat 配置 使用 HTTPS
  2. tomcat启动卡死在: Initializing Spring root WebApplicationContext的解决办法
  3. mysql半同步复制问题排查
  4. [CSAPP笔记][第一章计算机系统漫游]
  5. linux中文件描述符fd和文件指针flip的理解
  6. 玩转车联网1---初识OBD和行车助手
  7. VC++中使用MFC通过ADO连接数据库
  8. 了解你所不知道的SMON功能(一):清理临时段
  9. 在SQLMAP中使用动态SQL
  10. Arm architecture 第一章