Laravel 5.2 二、HTTP路由、创建控制器 与 资源路由
一、HTTP路由
所有路由都定义在 App\Providers\RouteServiceProvider 类载入的 app/Http/routes.php文件中。
1. 基本路由
简单的 Laravel 路由只接受一个 URI 和一个闭包
1
2
3
|
Route::get( 'foo' , function () { return 'Hello, Laravel!' ; }); |
对于常见的 HTTP 请求,Laravel 有以下几种路由
1
2
3
4
5
6
7
8
9
|
Route::get( $uri , $callback ); //响应 get 请求 Route::post( $uri , $callback ); Route::put( $uri , $callback ); Route::patch( $uri , $callback ); Route:: delete ( $uri , $callback ); Route::options( $uri , $callback ); Route::match([ 'get' , 'post' ], $uri , $callback ); //响应 get, post 请求 Route::any( 'foo' , $callback ); //响应所有请求 |
其中,$callback 可以是一个闭包,也可以是一个控制器方法。实际上,在开发中有不少情况是用作控制器方法的。
2. 路由参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
//单个路由参数 Route::get( 'user/{id}' , function ( $id ) { return 'User ' . $id ; }); //多个路由参数 Route::get( 'posts/{post}/comments/{comment}' , function ( $postId , $commentId ) { // }); //单个路由参数(可选) Route::get( 'user/{id?}' , function ( $id = 1) { return 'User ' . $id ; }); //多个路由参数(可选) Route::get( 'posts/{post}/comments/{comment?}' , function ( $postId , $commentId = 1) { // }); //注意:多个参数时,只可以对最后一个参数设置可选,其他位置设置可选会解析错误 // 正则约束单个参数 Route::get( 'user/{name?}' , function ( $name = 'Jone' ) { return $name ; })->where( 'name' , '\w+' ); //约束参数为单词字符(数字、字母、下划线) // 正则约束多个参数 Route::get( 'user/{id}/{name}' , function ( $id , $name ) { // })->where([ 'id' => '[0-9]+' , 'name' => '[a-z]+' ]); |
二、创建控制器
使用 Artisan 命令创建 php artisan make:controller UserController
现在,在 app/Http/Controllers 这个控制器目录下就生成了 UserController.php 的控制器文件。
三、高级路由
1. 命名路由
1
2
3
4
5
6
7
8
9
|
//命名闭包路由 Route:get( 'user' , array ( 'as' => 'alial' , function (){}); //或 name 方法链 Route:get( 'user' , function (){})->name( 'alias' ); //命名控制器方法路由 Route:get( 'user' , array ( 'uses' => 'Admin\IndexController@index' , 'as' => 'alias' )); //或 name 方法链 Route:get( 'user' , 'Admin\IndexController@index' )->name( 'alias' )); |
2. 路由分组
2.1 路由前缀和命名空间
例如,有两条指向控制器方法的路由
1
2
|
Route::get( 'admin/login' , 'Admin\IndexController@login' ); Route::get( 'admin/index' , 'Admin\IndexController@index' ); |
拿第一条来说,
参数一:admin/login 表示这个 URI 在请求网站根目录下的 admin/login 资源,完整地址就是 http://域名/admin/login (这里开启了 Apache 的路由重写,隐藏了 “index.php“ ),这个请求被映射到第二个参数中指定的控制器方法。注意,网站根目录是入口文件所在目录,在 Laravel 中就是 public 目录,配置服务器时最好也指向这里。
参数二:Admin\IndexController@login 表示这个控制器方法是在 App\Http\Controllers 命名空间下的,连起来就是 App\Http\Controllers\Admin\IndexController 控制器里的 login 方法。
显然,两条路由的 URI 和 控制器方法 都有相同的部分,那么,启用路由分组可以提取出公共部分:
1
2
3
4
5
|
// 第一个数组参数中,prefix 键定义 URI 的公共部分,namespace 键定义方法名(命名空间语法)的公共部分 Route::group( array ( 'prefix' => 'admin' , 'namespace' => 'Admin' ), function (){ Route::get( 'login' , 'IndexController@login' ); Route::get( 'index' , 'IndexController@index' ); }); |
2.2 资源路由
资源路由就是映射到资源控制器的路由,Laravel 资源控制器内置了对资源增删改查的 7 个方法以及 7 条路由。
首先,创建资源控制器 ArticleController
1
|
php artisan make:controller Admin/ArticleController --resource |
这样就生成了资源控制器在 app/Http/Controllers/Admin/ArticleController.php 文件(Admin 文件夹不存在时会自动创建),内置的 7 个方法如下 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
<?php namespace App\Http\Controllers\Admin; use Illuminate\Http\Request; use App\Http\Requests; use App\Http\Controllers\Controller; class LinksController extends Controller { /** * 显示一个资源的列表 * * @return \Illuminate\Http\Response */ public function index() { // } /** * 显示一个表单来创建一个新的资源 * * @return \Illuminate\Http\Response */ public function create() { // } /** * 保存最新创建的资源 * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request ) { // } /** * 显示指定的资源 * * @param int $id * @return \Illuminate\Http\Response */ public function show( $id ) { // } /** * 显示一个表单来编辑指定的资源 * * @param int $id * @return \Illuminate\Http\Response */ public function edit( $id ) { // } /** * 更新指定的资源 * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request , $id ) { // } /** * 删除指定的资源 * * @param int $id * @return \Illuminate\Http\Response */ public function destroy( $id ) { // } } |
然后,定义资源路由 。这里我还是选择在路由分组下定义,定义一条就好
1
2
3
4
5
6
|
Route::group( array ( 'prefix' => 'admin' , 'namespace' => 'Admin' ), function (){ Route::get( 'login' , 'IndexController@login' ); Route::get( 'index' , 'IndexController@index' ); // 资源路由 Route::resource( 'article' , 'ArticleController' ); }); |
最后,查看路由。有了资源控制器 和 资源路由,就可以看一下对以上 7 个方法的 HTTP 请求方式了。
使用 Artisan 命令 php artisan route:list 列出当前的所有路由,请求方式、URI、控制器方法、中间件都罗列出来了。
Laravel 5.2 二、HTTP路由、创建控制器 与 资源路由的更多相关文章
- Laravel路由和控制器的绑定
路由和控制器的关系 路由文件地址在\app\Http\routes.php,我们来看两种不同的路由. Route::get('/', function () { return view('welcom ...
- Laravel教程 二:路由,视图,控制器工作流程
Laravel教程 二:路由,视图,控制器工作流程 此文章为原创文章,未经同意,禁止转载. View Controller 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就 ...
- 0623-TP框架整理一(下载、入口文件、路由、创建控制器、调用模板、系统常量、命名空间)
一.下载解压后用ThinkPHP(核心)文件 核心文件夹(ThinkPHP)不要改,是作用于全局的,有需要可以改应用目录(Application) 二.创建入口文件: 运行后出现欢迎界面,在说明系统自 ...
- laravel路由与控制器(资源路由restful)
目前我们大致了解了laravel下,在开始一个Http程序需要先定义路由.之前的例子中,我们的业务逻辑都是在路由里实现,这对于简单的网站或web应用没什么问题,当我们需要扩大规模,程序变得复杂,分层的 ...
- 2016/5/6 thinkphp ①框架 ② 框架项目部署 ③MVC模式 ④控制器访问及路由解析 ⑤开发和生产模式 ⑥控制器和对应方法创建 ⑦视图模板文件创建 ⑧url地址大小写设置 ⑨空操作空控制器 ⑩项目分组
真实项目开发步骤: 多人同时开发项目,协作开发项目.分工合理.效率有提高(代码风格不一样.分工不好) 测试阶段 上线运行 对项目进行维护.修改.升级(单个人维护项目,十分困难,代码风格不一样) 项目稳 ...
- laravel之路由和控制器与视图
路由和控制器: : 路由与视图: 访问:
- Minor【 PHP框架】3.路由、控制器、视图
框架Github地址:github.com/Orlion/Minor (如果觉得还不错给个star哦(^-^)V) 框架作者: Orlion 知乎:https://www.zhihu.com/peop ...
- laravel学习笔记(二)
路由 HTTP方法:支持http1.1中所有类型传参方式,get,post,put,delete,options,patch Route::get($url,$callback); 路由参数: Rou ...
- [2018-01-12] laravel--路由(路由与控制器)
路由只用来接收请求 目前我们大致了解了laravel,在开始一个Http程序需要先定义路由.之前的例子中,我们的业务逻辑都是在路由里实现的,这对于简单的网站或web应用没什么问题,当我们需要扩大规模, ...
随机推荐
- Html/CSS前端如何实现文字边框阴影
上次我们聊了<Html5前端如何实现文字阴影>,其实在开发中现在对于阴影效果的使用已经越来越广泛了,那么今天我们就来说一说用同样的手法实现边框阴影. 一.边框阴影box-shadow 边框 ...
- 4.TableLayout、回调接口
会话详情页 listview条目布局 列,当第0列的内容过多时,不至于将其他列的内容,挤出屏幕 --> <TableLayout android:id="@+id/tl_rece ...
- Python制作二维码和条形码扫描器 (pyzbar)
条码在生活中随处可见,其可分为三类:一维条码.二维条码.三维条码 一维条码: 我们平时习惯称为条形码.条形码是将宽度不等的多个黑条和空白,按照一定的编码规则排列,用以表达一组信息的图形标识符.常见的条 ...
- Spark面试题
RDD怎么理解? RDD 是 Spark 的灵魂,也称为弹性分布式数据集.一个 RDD 代表一个可以被分区的只读数据集.RDD 内部可以有许多分区(partitions),每个分区又拥有大量的记录(r ...
- [原创]K8 cping 3.0大型内网渗透扫描工具
[原创]K8 Cscan 大型内网渗透自定义扫描器 https://www.cnblogs.com/k8gege/p/10519321.html Cscan简介:何为自定义扫描器?其实也是插件化,但C ...
- Excel 斜线表头制作方法
Excel 斜线表头制作方法
- asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案
之前碰到asp.net core异步进行新增操作并且需要判断某些字段是否重复的问题,进行插入操作的话会导致数据库中插入重复的字段!下面把我的解决方法记录一下,如果对您有所帮助,欢迎拍砖! 场景:EFC ...
- 【shiro】(1)---了解权限管理
了解权限管理 一.概念 1.什么是权限管理 只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源. 权限管理包 ...
- 微软Cloud+AI本地化社区贡献指南
本文主要介绍微软Cloud+AI本地化社区,以及通过多种途径贡献本地化的操作指南. 什么是本地化社区 Cloud+AI本地化社区是微软技术社区的组成部分之一,负责对微软官方技术文档本地化的支持工作.微 ...
- 纸上谈兵: 堆 (heap)
纸上谈兵: 堆 (heap) 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 堆(heap)又被为优先队列(priority ...