php框架laravel学习 三 (基本功能)

一、路由

路由其实就是浏览器里用来发http请求的指令,很多api的功能实际上就是通过URL来发送请求的。

http请求方式和响应是基础课,但是内容不少,要先研究好。

Laravel的路由和其他框架有所不同,需要手动逐个定制,好处在于功能强大,灵活,易于管理。

3种基本方式

第一种
就是Route::get(‘路径’, function(){…});这种形式,你可以根据需要把get换成post, put, delete等各种请求方式;这种写法最常见,也是最推荐的;

路由后面可以用闭包(匿名的函数)直接执行一段代码,这个是很多框架没有的,实际中不太可能把业务代码写到这个小小的闭包中,而是放到控制器中,因此最常见的写法是Route::get(‘路径’, xxxController@action);

路由的闭包函数最多的用处是用来测试某个功能或代码,即写即用,非常方便,我一般都会保留一个Route::get(‘test’, function(){…});做测试。

项目中往往路由很多,一个一个写有些人觉得慢了。有些CRUD是非常标准化的,于是就有了所谓的Restful路由(控制器)。

第二种:
Route::resource(‘posts’,’PostsController’);

写一个这样的路由,其实生成7个带路由名称的路由,这7个路由的路径形式是按照restful标准来制定的,所以有又叫做rest路由;但这个路由有个限制,就是在对应的控制器中,除了rest对应的7个方法外,其他方法如果要访问,要在Restful路由前面定义一个路由访问它。

第三种:
叫做控制路由,又叫隐式路由:
Route::controller(‘foo’, ‘FooController’);

这种写法很灵活,用魔术方法在方法名上设定http请求方式,这对于一些api式的请求很方便。

给隐式路由起名字需要注意,因为它不是逐个写路由的,方法如下:

Route::controller('users', 'UserController', [

    'anyLogin' => 'user.login',

]);

前面是方法名,后面是路由名称;

路由名称
话说回来,给路由命名有什么用呢?有用,因为路由(url)会在大量的视图文件中使用,有了路由名称,就可以解耦,可以任意修改url,而不会影响视图中的url;

路由参数
我们通常说的路由参数,一般看起来像这样index.php?user=ooo&psw=xxx; 但在Laravel看来,这种明文的方式比较丑且不安全。所以它的写法成了这样:

Route::get('user/{name}', function($name)
{
    //可以直接使用$name
})

这个参数值如果是字符串,不能与其他路由名称一样,系统会优先路由,这样就取不到值了。
关于取值这块,首先其实是可以直接传值,另外也可以通过对象方法取值,官网说明比较坑, route>input(id) route应该是一个路由对象,官网没说明怎么取这个对象,所以用route::input(‘name’) 来说明更为合理。
后面Request对象取值这一块,基本原理类似;

关于路由参数的各种花样可以看官网,写得很详细。

路由群组
这是极其重要的一个功能,使批量管理路由变得可能。在它的基础上可以批量绑定域名前缀,绑定二级域名等。

路由模型绑定
这是个比较狠的方法,方便了自己,但让别人更看不懂你的代码了,什么意思呢?我们一般传参数就是为了获取参数对应的实例,比如传id=12,就是为了去find id=12的一个用户实例。 路由模型绑定就是让你省略这一步,只要有带参数的路由,就自动获得对应的实例。要不要这么偷懒你自己判断,反正我不太喜欢这种方式。

路由缓存
执行一下可以使加载速度,但是如果路由有更改,需要再执行一下。请注意,如果你的路由是用闭包形式写的,将无法使用路由缓存,请放到控制器中。

二、控制器
学习Laravel之前,需要对MVC模式有一定了解。

控制器(controller)就像是一个老板,只会指挥别人,自己从来不干活。当然接活儿(http请求)是他的事。

所以尽量不要把业务逻辑写在controller里,controller里就写指挥的命令。
Controller命名空间

你把controller写在默认目录里是不需要写命名空间的,如果你写在其他地方,那么调用控制器的时候要加上命名空间。

URL::setRootControllerNamespace('App\Http\Controllers');

这条命令可以用来controller的根命名空间,但是是临时的,只在一次请求周期内有效;

这个方法的结果是一个字符串:

$action = Route::currentRouteAction();

隐式控制器在讲隐式路由的时候讲了,路由是发任务的,控制器是接任务的。 值得注意的是,在隐式路由中,如果你的方法名有多个单词组成,在路由中会自动用“-”链接起来,比如:

public function getAdminProfile() {}

在路由中就会转换成 users/admin-profile; 如果你写成

public function getAdmin_profile() {}

结果也是一样的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值