1 基本路由

 
1.1 定义路由的文件
app/Http/routes.php
 
1.2 最基本的路由:
Route::get(''index", function () { return "hello world"; }
可用的路由方法:
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
 
1.3 一个可以响应多个HTTP动作的路由:
 
Route::match(['get', 'post'], '/', function () { // }); Route::any('foo', function () { // });
 

2 路由参数

 
2.1 必选参数
Route::get('user/{id}', function ($id) { return 'User '.$id; });
 
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // });
 
注意: 路由参数不能包含 - 字符。请用下划线 (_) 替换。
 
2.2 可选的路由参数
可以在参数名称后面加上 ? 来实现:
Route::get('user/{name?}', function ($name = null) { return $name; }); Route::get('user/{name?}', function ($name = 'John') { return $name; });
 
2.3 正则表达式限制参数
你可以使用 where 方法来限制路由参数格式。where 方法接受参数的名称和定义参数应该如何被限制的正则表达式: Route::get('user/{id}', function ($id) { // }) ->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // }) ->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
 
2.4 全局限制
所有的路由参数都遵循,则可以使用 pattern 方法。
在 RouteServiceProvider 的 boot 方法里定义这些模式:
/** * 定义你的路由模型绑定,模式过滤器等。 * * @param \Illuminate\Routing\Router $router * @return void */ public function boot(Router $router) { $router->pattern('id', '[0-9]+'); parent::boot($router); }
 

3 命令路由

命名路由让你可以更方便的为特定路由生成 URL 或进行重定向,如果你在每个视图中生成url时候都使用别名,当某个路由改变时候不必去每个url中更改。
 
3.1 使用 as 数组键
Route::get('user/profile', ['as' => 'profile', function () { // }]);
 
Route::get('user/profile', [ 'as' => 'profile', 'uses' => 'UserController@showProfile' ]);
 
3.2 链式调用 name 方法:
Route::get('user/profile', 'UserController@showProfile')->name('profile');
 
3.3 对命名路由生成 URLs
一旦你在指定的路由中分配了名称,则可通过 route 函数来使用路由名称生成 URLs 或重定向:
$url = route('profile'); $redirect = redirect()->route('profile');
如果路由定义了参数,那么你可以把参数作为第二个参数传递给 route 方法。指定的参数将自动加入到 URL 中:
Route::get('user/{id}/profile', ['as' => 'profile', function ($id) { // }]); $url = route('profile', ['id' => 1]);
 

4 路由群组

 
路由群组允许你共用路由属性,例如:中间件、命名空间,你可以利用路由群组统一为多个路由设置共同属性,而不需在每个路由上都设置一次。共用属性被指定为数组格式,当作 Route::group 方法的第一个参数。
 
4.1 路由前缀
Route::group(['prefix' => 'admin'], function () { Route::get('users', function () { // 符合「/admin/users」URL }); });
你也可以使用 prefix 参数去指定路由群组中共用的参数:
Route::group(['prefix' => 'accounts/{account_id}'], function () { Route::get('detail', function ($account_id) { // 符合 accounts/{account_id}/detail URL }); });
 
4.2 中间件
Route::group(['middleware' => 'auth'], function () { Route::get('/', function () { // 使用 Auth 中间件 }); Route::get('user/profile', function () { // 使用 Auth 中间件 }); });
 
4.3 命名空间
Route::group(['namespace' => 'Admin'], function() { // 控制器在「App\Http\Controllers\Admin」命名空间 Route::group(['namespace' => 'User'], function() { // 控制器在「App\Http\Controllers\Admin\User」命名空间 }); });
 
请记住,默认 RouteServiceProvider 会在命名空间群组内导入你的 routes.php 文件,让你不用指定完整的 App\Http\Controllers 命名空间前缀就能注册控制器路由。所以,我们只需要指定在基底 App\Http\Controllers 根命名空间之后的部分命名空间。
 

5 资源路由

 
请求方法 请求URI 对应的控制器方法 代表的意义
GET /admin/article index 索引/列表
GET /admin/article/create create 创建(显示表单)
POST /admin/article store 保存你创建的数据
GET /admin/article/{id} show 显示对应id的内容
GET /admin/article/{id}/edit edit 编辑(显示表单)
PUT/PATCH /admin/article/{id} save 保存你编辑的数据
DELETE /admin/article/{id} destroy 删除
 
1>定义资源路由Route::resource('admin/article', 'ArticleController');。
2>当我使用get方式访问地址http://yourdomain/admin/article,相当于访问控制器ArticleController的index方法。
3>当我使用get方式访问地址http://yourdomain/admin/article/create,就会访问到create方法。
4>当我通过POST提交数据至地址http://yourdomain/admin/article,相当于由store方法处理。
 
使用命令 php artisan route:list 可以查看我们现有的路由,如下截图
 

6 控制器路由

注意:laravel5.3版本中被彻底移除
控制器路由我认为主要是解决路由定义繁杂的情况,因为大型的应用业务复杂,控制器相当的多,我们不可能每一个控制器的方法都要定义一个路由。Laravel的控制器路由可以完美解决问题:
Route::controller('/', 'HomeController');
我们的控制器方法的写法也要有所变化:
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller; class HomeController extends Controller { /** * 显示首页。 * * @return Response */ public function getIndex() { return view('home'); } /** * 显示关于界面 * * @return Response */ public function getAbout() { return view('about'); } }
依照上述例子,如果我们访问地址http://yourdomain/就会显示HomeController的getIndex方法产生的内容,访问http://yourdomain/about,就会显示getAbout方法产生的内容。除了使用如get{Method}这种格式,还可以有post{Method}、delete{Method}等,至于前缀get,post等代表的意义,应该猜得出吧?
 
这样的定义我们可以不用再给控制器的每一个方法定义一个路由,只需给控制器定义一个路由即可。
 
 
 

laravel5.2总结--路由的更多相关文章

  1. laravel-5.3(1) 路由配置

    第一步: 按照上一篇搭建好工程后可以看到框架默认的 welcome 默认视图: 一般的web 开发框架是MVC设计模式,那么我们现在创建自己的控制器和视图,CMD 进入到工程根目录执行 php art ...

  2. 1-1Controller之Request

    laravel5.5版本 //路由: Route::any('request1',['uses'=>'StudentController@request1']); //控制器中的方法: publ ...

  3. Laravel5 路由问题 /home页面无法访问

    参考网址:http://stackoverflow.com/questions/11791375/laravel-routes-not-working Laravel5 路由问题 /home页面无法访 ...

  4. laravel5.4学习--laravel基本路由

    最基本的 Laravel 路由只接收一个 URI 和一个闭包,并以此提供一个非常简单且优雅的定义路由方法: Route::get('foo', function () {return 'Hello W ...

  5. Laravel5.5添加新路由文件并制定规则

    Laravel5.5里面有4个默认的路由文件,其中web.php是默认路由文件,如果需要添加其他路由文件,按照以下步骤进行. 此处以添加网站home前端路由举例,我已经先在/app/Http/Cont ...

  6. Laravel5路由/home页面无法访问

    报错信息: Not Found The requested URL /laravel5/public/home was not found on this server. 解决方法: 1.编辑apac ...

  7. Laravel5笔记--路由

    路由:简单讲就是定义URL请求转向某个业务逻辑(一般是控制器方法)的方法. 1.路由定义文件: /routes/web.php   //定义web访问的路由 /routes/api.php    // ...

  8. laravel5.8笔记四:路由

    laravel框架,必须先设置路由,才可以访问内部的控制器部分. 路由文件:routes/web.php. 基本路由 Route::get('/user', 'UserController@index ...

  9. 关于php laravel5.1框架出现路由找不到的情况

    开启apache模块在apache配置文件LoadModule rewrite_module modules/mod_rewrite.so前面的#去掉然后修改 vim  /etc/init.d/htt ...

随机推荐

  1. javascript动态修改对象的属性名

    在做东钿业务系统的时候,经常碰到写很多重复的ajax对接,于是就想封装一个方法,但是接收data的字段名不一样,所以就需要用到动态对象属性名这个写法了.其实很简单.直接看一下代码吧.

  2. leetcode 355 Design Twitte

    题目连接 https://leetcode.com/problems/design-twitter Design Twitte Description Design a simplified vers ...

  3. java 创建一个新的http 请求的一种实现方式

    项目中遇到要在后台向集群中的其他一台服务器发送一个请求,参考了网上一些材料,最终完成了需求.代码如下 /** * @Title requestURLWithPost * @Description:发送 ...

  4. SqlServer Alwayson 搭建排错记录(一)

    这几天搭建alwayson,碰到一堆问题,解决起来花了不少时间,特此记下几个有代表性的,以免以后再碰到做重复功. 一.创建可用性组 使用SSMS的创建可用性组向导,添加了一个主副本node1,一个辅助 ...

  5. POJ 1742 Coins(多重背包,优化)

    <挑战程序设计竞赛>上DP的一道习题. 很裸的多重背包.下面对比一下方法,倍增,优化定义,单调队列. 一开始我写的倍增,把C[i]分解成小于C[i]的2^x和一个余数r. dp[i][j] ...

  6. hdu-1272 小希的迷宫---并查集或者DFS

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1272 题目大意: Problem Description 上次Gardon的迷宫城堡小希玩了很久(见 ...

  7. [OS] 可执行文件的装载

    http://www.jianshu.com/p/e1300e7a4c48 1. 虚拟内存 在早期的计算机中,程序是直接运行在物理内存上的,程序在运行时访问的地址就是物理地址.可是,当计算机中同时运行 ...

  8. 2017.12.13 Java中是怎样通过类名,创建一个这个类的数组

    先在类方法中定义数组的方法: public int[] method6(int[] arr){ for(int i = 0; i<arr.length;i++){ arr[i] = (int)( ...

  9. javaweb基础(31)_国际化(i18n)

    一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationaliz ...

  10. Java设计模式学习——设计原则

    第一章 设计原则 1.开闭原则 一个软件实体,像类,模块,函数应该对扩展开放,对修改关闭 在设计的时候,要时刻考虑,让这个类尽量的好,写好了就不要去修改.如果有新的需求来,在增加一个类就完事了,原来的 ...