澳门新浦京电子游戏Laravel Http 层—路由

Laravel框架在PHP开采中央银行使十一分科学普及,本文重要对Laravel框架中的路由设置作详细的牵线,Laravel的路由配置特别灵活,怎么着设置好路由对PHP应用来讲也是大器晚成对意气风发首要的。

1、基本路由

最基本的 Laravel 路由只收到三个 URI
和一个闭包,并以此提供五个相当的轻松且高雅的定义路由艺术:

Route::get('foo', function () {
    return 'Hello World';
});

私下认可路由文件
有 Laravel 路由都定义在投身 routes
目录下的路由文件中,这么些文件通过框架自动加载。
routes/web.php 文件定义了web分界面包车型大巴路由,那几个路由被分配了web
中间件组,进而得以提供session和csrf防护等职能。
routes/api.php 中的路由是无状态的,被分配了 api
中级件组。

对超级多用到来说,都是从 routes/web.php 文件开始定义路由。

大家得以注册路由来响应任何 HTTP 央浼:

//get 请求
Route::get($uri, $callback);
//post 请求
Route::post($uri, $callback);
//put 请求
Route::put($uri, $callback);
//patch 请求
Route::patch($uri, $callback);
//delete 请求
Route::delete($uri, $callback);
//options 请求
Route::options($uri, $callback);

澳门新浦京电子游戏 ,不时还索要注册路由响应多个 HTTP 乞求——那足以因而 match
方法来兑现。大概,可以动用 any 方法注册二个路由来响应全部 HTTP 央求:

Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('foo', function () {
    //
});

CSRF防护
在 web
路由文件中装有乞请情势为PUTPOSTDELETE
的HTML表单都会蕴藏三个CSRF令牌字段,不然,央求会被拒却。关于CSLANDF的愈来愈多细节,能够参照CSRF文档:

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

澳门新浦京电子游戏 1

澳门新浦京电子游戏 2

2、路由参数

必选参数
不时大家须求在路由中抓获 UF12berlinettaI 片段。例如,要从 URL
中捕获用户ID,要求通过如下方式定义路由参数:

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

能够按须求在路由中定义多少个路由参数:

Route::get('/hello/{name}/by/{user}',function($name,$user){
    return "Hello {$name} by {$user}!";
});

路由参数总是通过{}开展打包,那些参数在路由被施行时会被传送到路由的闭包。路由参数无法包括
- 字符,需求的话能够应用 _ 替代。

小心上述参数是必选的,若无输入参数会抛出
MethodNotAllowedHttpExceptionNotFoundHttpException 异常。

除此以外闭包函数中的参数与路由参数意气风发风度翩翩对应。

可选参数
一时候大概供给钦定可选的路由参数,那能够透过在参数名后加一个 ?
标识来得以完结,这种情状下须求给相应的变量钦命暗中同意值:

Route::get('user/{name?}', function ($name = null) {
    return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
    return $name;
});

正则限制
能够选择路由实例上的 where 方法来节制路由参数的格式。where
方法采用参数名为键和贰个正则表达式为值的数组来定义该参数怎么着被束缚:

Route::get('user/{name}', function ($name) {
    //
})->where('name', '[A-Za-z]+');

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]+']);

全局约束
若是想要路由参数在大局范围内被给定正则表明式节制,能够动用 pattern
方法。在RouteServiceProvider 类的 boot 方法中定义限定形式:

/**
 * 定义路由模型绑定,模式过滤器等
 * 
* @param IlluminateRoutingRouter $router 
* @return void 
* @translator 
*/
public function boot(){
 Route::pattern('id', '[0-9]+');
 parent::boot();
}

若果情势被定义,将会自动应用到全数富含该参数名的路由中:

Route::get('user/{id}', function ($id) {
    // 只有当 {id} 是数字时才会被调用
});

Laravel HTTP层

基本路由

3、命名路由

命名路由为生成 URL
重定向提供了福利。完成也很简短,在路由定义之后选取 name
方法链的措施来得以落成:

Route::get('user/profile', function () {
    //
})->name('profile');

还足感到调节器动作钦命路由名称:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

为命名路由生成URL重定向
给定路由分配名称今后,就能够透过帮扶函数 route 为该命名路由生成 UKugaL:

$url = route('profile');
return redirect()->route('profile');

假定命名路由定义了参数,能够将该参数作为第二个参数传递给 route
函数。给定的路由参数将会活动插入到 URL 中:

Route::get('user/{id}/profile', function ($id) {
    //
})->name('profile');

$url = route('profile', ['id' => 1]);

上海体育地方列出了 Laravel HTTP
层的相干文化大纲。由于当下友好的行事中网页、App、小程序等都采纳前后台分离的方法得以完毕,前端页面通过接口从后端获取数据并协和渲染,因而大纲中的
Session、视图、CSTiguanF 敬爱多少个部分将不做收拾。又限于 HTTP
层的内容太多,笔者在此篇团长收拾路由、中间件、控制器 3
部分内容。在下风流洒脱期里,再整合治理 HTTP 乞求、响应及表单验证部分的原委。

您的应用程序的大好些个路由将要 app/routes.php 文件中定义。Laravel
中最简便易行的路由由二个 UEnclaveI 和三个闭包调用组成。

4、路由群组

路由分组就是将大器晚成组具备意气风发致属性(中间件命名空间子域名路由前缀等)的路由使用
Route Facadegroup 方法聚合起来。

分享属性以数组的款式作为第二个参数被传送给 Route::group 方法。

中间件

要给路由群组中定义的全数路由分配中间件,能够在群组属性数组中动用
middleware。中间件将会遵照数组中定义的次第依次施行:

Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function () {
        // 使用 Auth 中间件
    });

    Route::get('user/profile', function () {
        // 使用 Auth 中间件
    });
});

命名空间

取名空间能够透过namespace最重要字来安装。

私下认可意况下, RouteServiceProvider
引进你的路由文件并内定其下具备调节器类所在的暗中同意命名空间AppHttpControllers,因而,我们在概念的时候只要求钦定命名空间
AppHttpControllers 之后的片段就能够 :

Route::group(['namespace' => 'Admin'], function(){
    // 控制器在 "AppHttpControllersAdmin" 命名空间下
});

子域名路由

子域名能够通过domain首要字来安装 :

Route::group(['domain' => '{account}.myapp.com'], function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

如此大家在浏览器中做客http://xiao.myapp.com/user/5。

路由前缀

路由前缀可以通过 prefix 关键字来设置 :

Route::group(['prefix' => 'admin'], function () {
    Route::get('users', function () {
        // 匹配 "/admin/users" URL
    });
});

0x00 路由

澳门新浦京电子游戏 3

路由

基本 GET 路由

5、路由模型绑定

流入模型ID到路由或调节器动作时,平日须要查询数据库才干得到相应的模子数据。Laravel
路由模型绑定让流入模型实例到路由变得简单,比如,你能够将非常给定 ID
的整个 User 类实例注入到路由中,而不是一向注入客商ID。

隐式绑定

Laravel 会自动解析定义在路由或调节器动作(变量名匹配路由一些)中的
Eloquent 模型类型证明,比方:

Route::get('api/users/{user}', function (AppUser $user) {
    return $user->email;
});

在这里个事例中,由于项目证明了 Eloquent 模型 AppUser,对应的变量名
$user 会相称路由一些中的 {user},那样,Laravel 会自动注入与央求 UENCOREI
中传出的 ID 对应的客户模型实例。

假定数据库中找不到相应的模子实例,会自动生成 HTTP 404 响应。

自定义键名
风流倜傥旦你想要在隐式模型绑定中接受数据表的此外字段,能够重写 Eloquent
模型类的 getRouteKeyName 方法:

/**
 * 获取模型的路由密钥.
 *
 * @return string
 */
public function getRouteKeyName()
{
    return 'slug';
}

显式绑定

要登记显式绑定,须求使用路由的 model
方法来为给定参数钦赐绑定类。应该在 RouteServiceProvider 类的 boot
方法中定义模型绑定:

public function boot()
{
    parent::boot();
    Route::model('user', AppUser::class);
}

接下去,定义二个含有 {user} 参数的路由:

$router->get('profile/{user}', function(AppUser $user) {
     //
});

由于大家曾经绑定 {user} 参数到 AppUser 模型,User
实例会被注入到该路由。因而,假诺央浼 U奥迪Q3L 是
profile/1,就能注入叁个客商 ID 为 1User 实例。

假定匹配的模型实例在数据库不设有,会自动生成并回到 HTTP 404 响应。

自定义解析逻辑

黄金时代旦你想要使用自定义的辨析逻辑,供给接受 Route::bind 方法,传递到
bind 方法的闭包会获取到 UTiguanI
诉求参数中的值,并且再次回到您想要在该路由中流入的类实例:

public function boot()
{
    parent::boot();

    Route::bind('user', function($value) {
        return AppUser::where('name', $value)->first();
    });
}

基本路由

构建最核心的路由只须要叁个 UEvoqueI 和三个闭包。全数的 Laravel 路由都在
routes 目录中的路由文件中定义。Laravel 暗中同意提供 web.php 和 api.php
四个路由文件。前面叁个定义 web 页面路由,暗中同意使用 web
中间件组;后面一个定义无状态路由,会使用 api 中间件组。

Laravel 的 Route Facade 提供了 get, post, put, patch, delete,
options, match, any 等路由艺术来支持响应单个、多少个、全数的 HTTP
方法。

澳门新浦京电子游戏 4

基本路由

Route::get('/', function()
{
return 'Hello World';
});

6、表单方法假造

HTML 表单不扶植 PUTPATCH 或者 DELETE 诉求方法,由此,当定义
PUTPATCHDELETE 路由时,须要加上一个潜藏的 _method
字段到表单中,其值被充当该表单的 HTTP 央求方法:

<form action="/foo/bar" method="POST">
    <input type="hidden" name="_method" value="PUT">
    <input type="hidden" name="_token" value="{{ csrf_token() }}">
</form>

还足以运用扶植函数 method_field 来实现这一指标:

{{ method_field('PUT') }}

路由参数

Laravel 能够透过多样主意适用由参数的必选、可选及具体魄式进行约束。

澳门新浦京电子游戏 5

路由参数

基本 POST 路由

7、访谈当前路由

您能够利用 Route Facade 上的 currentcurrentRouteName
currentRouteAction 方法来访谈管理当下输入乞请的路由消息:

$route = Route::current();
$name = Route::currentRouteName();
$action = Route::currentRouteAction();

参考API文档了解路由门面底层类以及Route实例的越来越多可用方法。

命名路由

Laravel 可认为钦点路由也许调控器方法命名,也得感到已命名的路由生成 U宝马X3L。

澳门新浦京电子游戏 6

命名路由

Route::post('foo/bar', function()
{
return 'Hello World';
});

路由组

Laravel
的路由组允许分享路由属性,常用的路由组富含中间件、命名空间、子域名路由和路由前缀。

澳门新浦京电子游戏 7

路由组

注册三个路由以响应全体 HTTP 方法

路由模型绑定

Laravel
路由模型绑定提供了四个有益的章程自动将模型注入到路由中,能够隐式绑定,也足以显式绑定。

隐式绑准时,暗许绑定 Eloquent 模型的 ID 字段。通过模型的 getRouteKeyName
方法能够自定义绑定键名。

显式绑定则是采纳路由的 model 方法来为原来就有参数申明 class 。

澳门新浦京电子游戏 8

路由模型绑定

Route::any('foo', function()
{
   return 'Hello World';
});

0x01 路由中间件

Laravel 中间件提供了朝气蓬勃种有益的建制来过滤走入应用的 HTTP
诉求。能够将中间件想象为生机勃勃雨后春笋的「层」,HTTP
央求必得通过它们才会触发你的应用程序。每意气风发层都得以检查实验采取的倡议,以至能够完全谢绝央浼访谈您的选拔。

大范围的中间件实例包罗身份验证中间件、日志中间件、 CS凯雷德F
中间件等。多少个单身的中间件还足以定义为中等件组。Laravel 带有开箱即用的
web 和 api 中间件组。

澳门新浦京电子游戏 9

路由中间件

强逼三个路由必得通过 HTTPS 访谈

0x02 控制器

调控器可以将有关的央浼管理逻辑组成一个独立的类。是在路由文件中以闭包的款式定义全数的倡议管理逻辑之外的另生龙活虎种样式。

Route::get('foo', array('https', function()
{
    return 'Must be over HTTPS';
}));

财富调控器

Laravel 能源路由得以将优秀的 CRUD
路由钦命到一个调节器上,仅仅供给意气风发行代码就可以完毕,那大大进步了后台业务的支出效能。

以照片调整器为例,四个步骤能够定义好管理全数应用保存的照片 HTTP
央求的作业。

  1. 因此少年老成行命令创造贰个调控器
  2. 为那几个调节器注册一个财富路由

财富路由的申明会成立的三个路由来拍卖百端待举的财富操作,那一个操作都富含在调节器中了。

澳门新浦京电子游戏 10

能源调节器操作管理

除开提供暗中同意的操作外,能够依靠要求对操作进行自定义。

  1. 能够只定义部分财富路由
  2. 能够重写暗许的能源路由名称
  3. 能够重写财富路由的默许参数名称
  4. 能够落成能源 U福睿斯I 的言语本地化
  5. 能够叠合其余急需的能源调控器

澳门新浦京电子游戏 11

资源调控器

平常您须要依照路由发生 U锐界Ls,您能够经过动用 URubiconL::to 方法:

依据注入与调控器

Laravel
使用劳务容器来分析全数的调控器。能够在调控器的布局方法中对其余依赖使用途目限制,也得以在调整器方法中动用信任类型约束。

$url = URL::to('foo');

下一步

在下少年老成期中,我将整合治理 Laravel HTTP
诉求、响应及表单验证的相关知识。那个是装有互联网选用最根本的大器晚成都部队分。

讨论导图在导出的进度中会变得模糊,如有必要高清的思维导图源文件,请加Wechat公众号:up2048,并复苏“脑图”来获取。

– EOF –

路由参数

推荐介绍阅读

  • Laravel思维导图:急速学习Laravel之主题概念
  • 高效学习Laravel系列思维导图之风姿洒脱:入门指南
  • 十一张合计导图带你快捷学习PHP言语底子
  • 自身心目中的网络接口设计到底是怎么着的进度?
  • 多平台合併客户系统规划
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)
{
//
});

基本路由过滤器的方式

你只怕希望依据 U福特ExplorerI 为生机勃勃组路由钦定过滤器。

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');

命名路由

命名路由在更易于在更改跳转或 U大切诺基Ls
时钦命路由。您能够像那样为路由钦点贰个名字:

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

您也得以为调控器的不二等秘书籍内定路由名字:

Route::get('user/profile', array('as' => 'profile', 'uses' => 
'UserController@showProfile'));

近期您在生成 UXC90Ls 或跳转的时候利用路由的名字:

$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);

其次,您可以抛出一个SymfonyComponentHttpKernelExceptionNotFoundHttpException
的实例。

越来越多关于管理404不胜和为那么些错误使用应用自定义响应的新闻方可在 错误
章节中找到。

路由至调控器

Laravel 不唯有允许你路由至闭包,也足以路由至调控器类,以致同意创建能源支配器.

发表评论

电子邮件地址不会被公开。 必填项已用*标注