Laravel框架路由配置总结、设置技巧大全


Posted in PHP onSeptember 03, 2014

基本路由

您的应用程序的绝大多数路由将在 app/routes.php 文件中定义。Laravel 中最简单的路由由一个 URI 和一个闭包调用组成。

基本 GET 路由

Route::get('/', function()

{

return 'Hello World';

});

基本 POST 路由
Route::post('foo/bar', function()

{

return 'Hello World';

});

注册一个路由以响应所有 HTTP 方法
Route::any('foo', function()

{

   return 'Hello World';

});

强制一个路由必须通过 HTTPS 访问
Route::get('foo', array('https', function()

{

    return 'Must be over HTTPS';

}));

经常您需要根据路由产生 URLs,您可以通过使用 URL::to 方法:
$url = URL::to('foo');

路由参数

Route::get('user/{id}', function($id)

{

return 'User '.$id;

});

可选的路由参数
Route::get('user/{name?}', function($name = null)

{

return $name;

});

带默认值的可选的路由参数
Route::get('user/{name?}', function($name = 'John')

{

return $name;

});

带正则表达式约束的路由
Route::get('user/{name}', function($name)

{

//

})

->where('name', '[A-Za-z]+');

Route::get('user/{id}', function($id)

{

//

})

->where('id', '[0-9]+');

路由过滤器

路由过滤器提供了一种限制访问指定路由的简单的方法,这在您需要为您的站点创建需要认证区域的时候非常有用。Laravel 框架中包含了一些路由过滤器,比如 auth 过滤器、auth.basic 过滤器、guest 过滤器、以及 csrf 过滤器。它们被存放在 app/filters.php 文件中。

定义一个路由过滤器

Route::filter('old', function()

{

if (Input::get('age') < 200)

{

return Redirect::to('home');

}

});

如果一个响应从一个路由过滤器中返回,这个响应即被认为是这个请求的响应,路由将不被执行,任何关于这个路由的 after 过滤器也将被取消执行。

为一个路由指定一个路由过滤器

Route::get('user', array('before' => 'old', function()

{

return 'You are over 200 years old!';

}));

为一个路由指定多个路由过滤器
Route::get('user', array('before' => 'auth|old', function()

{

return 'You are authenticated and over 200 years old!';

}));

指定路由过滤器参数
Route::filter('age', function($route, $request, $value)

{

//

});

Route::get('user', array('before' => 'age:200', function()

{

return 'Hello World';

}));

当路由过滤器接收到作为第三个参数的响应 $response:

Route::filter('log', function($route, $request, $response, $value)

{

//

});

基本路由过滤器的模式

您可能希望根据 URI 为一组路由指定过滤器。

Route::filter('admin', function()

{

//

});

Route::when('admin/*', 'admin');

在上面的例子中,admin 过滤器将应用带所有以 admin/ 开头的路由。星号作为一个通配符,将适配到所有字符的组合。

您也可以通过指定 HTTP 方法约束模式过滤器:

Route::when('admin/*', 'admin', array('post'));

过滤器类

对于高级的过滤器,您可以使用一个类代替闭包函数。因为过滤器类是位于应用程序之外的 IoC 容器,您能够在过滤器中使用依赖注入,更易于测试。

定义一个过滤器类

class FooFilter {

public function filter()

{

// Filter logic...

}

}

注册一个基于类的过滤器
Route::filter('foo', 'FooFilter');

命名路由

命名路由在更易于在生成跳转或 URLs 时指定路由。您可以像这样为路由指定一个名字:

Route::get('user/profile', array('as' => 'profile', function()

{

//

}));

您也可以为控制器的方法指定路由名字:
Route::get('user/profile', array('as' => 'profile', 'uses' => 

'UserController@showProfile'));

现在您在生成 URLs 或跳转的时候使用路由的名字:

$url = URL::route('profile');

$redirect = Redirect::route('profile');

您可以使用 currentRouteName 方法获取一个路由的名字:
$name = Route::currentRouteName();

路由组

有些时候您可能希望应用过滤器到一组路由。您不必要为每个路由指定过滤器,可以使用路由组:

Route::group(array('before' => 'auth'), function()

{

Route::get('/', function()

{

// Has Auth Filter

});

Route::get('user/profile', function()

{

// Has Auth Filter

});

});

子域名路由

Laravel 路由也能够处理通配符的子域名,并且从域名中获取通配符参数:

注册子域名路由

Route::group(array('domain' => '{account}.myapp.com'), function()

{

Route::get('user/{id}', function($account, $id)

{

//

});

});

路由前缀

一组路由可以通过在属性数组中使用 prefix 选项为路由组添加前缀:

为路由组添加前缀

Route::group(array('prefix' => 'admin'), function()

{

Route::get('user', function()

{

//

});

});

路由模型绑定

模型绑定提供了一个简单的方法向路由中注入模型。比如,不仅注入一个用户的 ID,您可以根据指定的 ID 注入整个用户模型实例。首先使用 Route::model 方法指定所需要的模型:

为模型绑定一个变量

Route::model('user', 'User');

然后, 定义一个包含 {user} 参数的路由:
Route::get('profile/{user}', function(User $user)

{

//

});

因为我们已经绑定 {user} 参数到 User 模型,一个 User 实例将被注入到路由中。因此,比如一个 profile/1 的请求将注入一个 ID 为 1 的 User 实例。

注意: 如果在数据库中没有找到这个模型实例,将引发404错误。

如果您希望指定您自己定义的没有找到的行为,您可以为 model 方法传递一个闭包作为第三个参数:

Route::model('user', 'User', function()

{

throw new NotFoundException;

});

有时您希望使用自己的方法处理路由参数,可以使用 Route::bind 方法:

Route::bind('user', function($value, $route)

{

return User::where('name', $value)->first();

});

引发404错误

有两种方法在路由中手动触发一个404错误。首先,您可以使用 App::abort 方法:

App::abort(404);

其次,您可以抛出一个 Symfony\Component\HttpKernel\Exception\NotFoundHttpException 的实例。

更多关于处理404异常和为这些错误使用使用自定义响应的信息可以在 错误 章节中找到。

路由至控制器

Laravel 不仅允许您路由至闭包,也可以路由至控制器类,甚至允许创建 资源控制器.

更多信息请访问 控制器 文档。

PHP 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 PHP
PHP 读取文件的正确方法
Apr 29 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
PHP错误Allowed memory size of 67108864 bytes exhausted的3种解决办法
Jul 28 PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
动态表单验证的操作方法和TP框架里面的ajax表单验证
Jul 19 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 PHP
CodeIgniter框架URL路由总结
Sep 03 #PHP
Yii 快速,安全,专业的PHP框架
Sep 03 #PHP
Laravel框架数据库CURD操作、连贯操作总结
Sep 03 #PHP
Yii中render和renderPartial的区别
Sep 03 #PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 #PHP
Fedora下安装php Redis扩展笔记
Sep 03 #PHP
使用YUI+Ant 实现JS CSS压缩
Sep 02 #PHP
You might like
第三节--定义一个类
2006/11/16 PHP
php中Ctype函数用法详解
2014/12/09 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
查找Oracle高消耗语句的方法
2014/03/22 Javascript
jquery常用方法及使用示例汇总
2014/11/08 Javascript
node.js中的fs.readFile方法使用说明
2014/12/15 Javascript
JavaScript中的对象的extensible属性介绍
2014/12/30 Javascript
纯JS前端实现分页代码
2016/06/21 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
使用JS正则表达式 替换括号,尖括号等
2016/11/29 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
React-router v4 路由配置方法小结
2017/08/08 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
浅谈Vuejs中nextTick()异步更新队列源码解析
2017/12/31 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
为jquery的ajax请求添加超时timeout时间的操作方法
2018/09/04 jQuery
js实现滑动滑块验证登录
2020/07/24 Javascript
JS PHP字符串截取函数实现原理解析
2020/08/29 Javascript
Vue实现购物车基本功能
2020/11/08 Javascript
[46:28]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
python 实现视频流下载保存MP4的方法
2019/01/09 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
python 画图 图例自由定义方式
2020/04/17 Python
HTML5 canvas基本绘图之图形变换
2016/06/27 HTML / CSS
Paradigit比利时电脑卖场:购买笔记本、电脑、平板和外围设备
2016/11/28 全球购物
开场白怎么写
2015/06/01 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
python中super()函数的理解与基本使用
2021/08/30 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript