Laravel实战教程笔记(八) 路由

原创 木鱼  2017-10-24 18:55  阅读 36 次

最近比较忙,Laravel系列的文章好久没更新了。

先是公司突然要搬家,搬的离我住的地方太远(刚交了一年房租..),决定辞职,然后交接了一下。

 

其实Laravel的路由我很早就想写文章说一下了,不过之前的laravel文章也都没用上路由,那么现在说也不迟..

路由

还是那句话,看文章的同时最好参考着手册。

 

Laravel的路由不同于ThinkPHP,所有的路由都需要我们手动添加。

路由配置文件

Laravel5.1:

app/Http/routes.php

Laravel5.5:

routes/web.php(大多数情况下都在这儿)

我们打开配置文件,会看到一个默认的路由配置:

Route::get('/', function () {
    return view('welcome');
});

这是一个闭包路由,意思是:通过get方式访问域名的根目录,返回welcome页面

这种方式路由在实际项目中很少使用,所以就不再说了。

 

定义路由

Laravel是支持RESTful风格的

域名

    假设我们的域名是:www.m5yu.com

GET

我们定义一个GET路由:Route::get('user', '\Test\TestController@abc')

当我们访问:www.m5yu.com/userList,我们会访问命名空间为Test的控制器TestController里面的abc方法

传参

如果我们需要传参:

Route::get('user/{id}', '\Test\TestController@abc')

可选传参:

Route::get('user/{id?}', '\Test\TestController@abc')

参数约束

我们还可以使用where方法约束参数类型,where方法接收参数名称和定义参数应该如何约束的正则表达式:

Route::get('user/{id}', '\Test\TestController@abc')->where('id', '[0-9]+')

多参数约束:

Route::get('user/{id}/{name}', '\Test\TestController@abc')->where(['id'=> '[0-9]+', 'name'=>'[a-z]+'])

CSRF保护

web.php文件下定义的路由,会默认开启CSRF保护

当我们使用文件中定义的POSTPUTDELETE都应该在表单内添加CSRF令牌字段

<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

如果我们使用AJAX或其他请求,我们可以把路由定义在routes/api.php中,我们也可以用csrf_token函数手动添加该字段

// jQuery
$.post('/profile', {'_token': '{{ csrf_token() }}'}, function(data, textStatus, xhr) {
	
});

路由组

假设我们整个后台的路由格式都是/admin/xxx类型;

假设我们整个后台的路由命名空间都是Admin;

那么我们要重复写多少次同样的代码? 放心,优雅的Laravel不会让这样的事出现的!

Route::prefix('admin')->namespace('Admin')->group(function () {
   Route::get('user', 'TestController@getUser'); // www.m5yu.com/admin/user
   Route::delete('user', 'TestController@deleteUser'); // www.m5yu.com/admin/user
});

我们定义了一个路由组,里面有两条路由,他们的前缀都是admin,命名空间都是Admin

资源路由

路由组让我们能把一组路由按模块划分,但是不知道大家有没有发现,上面的路由组中定义了两条路由,分别是DELETE操作和GET操作,假设我们还有POST、HEAD、PUT操作,我们要定义多少条“很重复”的路由?

Route::get('user', 'TestController@getUser'); // www.m5yu.com/admin/user
Route::delete('user', 'TestController@deleteUser'); // www.m5yu.com/admin/user

那么我们就使用资源路由吧,他生成的路由可是RESTful风格的哦!

Route::resource('test', 'Test\TestController');

我们定义了资源路由后,怎么查看路由的地址呢?

查看路由

laravel有非常好用的command,使用php artisan route:list命令来查看

我们所有的路由详情就都打印出来了

 

本来是想顺便写一下中间件呢,谁知道越写越多,下一章就介绍下laravel的中间件吧!

本文地址:https://www.m5yu.com/laravel-route.html
关注我们:请关注一下我们的微信公众号:扫描二维码,公众号:木鱼博客
版权声明:本文为原创文章,版权归 木鱼 所有,欢迎分享本文,转载请保留出处!

发表评论


  1. 跨境电商平台
    跨境电商平台 【农民】 @回复

    这种文章一定要顶,谢谢了

  2. 头条新闻
    头条新闻 【农民】 @回复

    文章不错非常喜欢