Laravel思维导图之Laravel,3中的路由文件与途径

路由:不难讲就是定义URL请求转向某个业务逻辑(一般是控制器方法)的主意。

  • 粗略优雅的定义路由的不二法门:

前言

www.30064.com 1

1、路由定义文件:

我们兴许没有留神到, 在 Laravel 4 以及更老版本中,
路由逻辑是性质上的一个瓶颈–更加是对此有无数路由定义的利用而言.
一个唯有几百条路由定义的 Laravel 站点, 框架光注册路由就需求半秒多的时间.
不过之后不用担心这一个标题了, 因为 Laravel 5 引入了 路由缓存(route
caching), 可以大大优化路由的属性(闭包格局定义的路由无法缓存,
所以该把所有的闭包路由定义都移到控制器中了).

Laravel HTTP层

/routes/web.php   //定义web访问的路由

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

1、回看Laravel 5.2中级由的修改
在 Laravel 5.2
的routes.php中大家可以看看路由被划分成五个路由群组:web和api,那样做的原因是基于中间件群组的眼光:开箱即可享有web和api两组路由。

上图列出了 Laravel HTTP
层的相关文化大纲。由于近期温馨的劳作中网页、App、小程序等都拔取前后台分离的不二法门贯彻,前端页面通过接口从后端获取数据并协调渲染,由此大纲中的
Session、视图、CSRF 敬爱多少个部分将不做整理。又限于 HTTP
层的内容太多,我在那篇元帅整理路由、中间件、控制器 3
部分内容。在下一期里,再整治 HTTP 请求、响应及表单验证部分的情节。

/routes/api.php    //定义api访问的路由,此路由定义的url都要加/api前缀

  • 装有的 Laravel 路由都在 routes
    目录中的路由文件中定义,这几个文件都由框架自动加载。

  • routes/web.php 文件用于定义 web 界面的路由。那一个中的路由都会被分配给
    web 中间件组,它提供了对话状态和 CSRF 爱戴等功能。

  • 概念在 routes/api.php 中的路由都是无状态的,并且被分配了 api
    中间件组。

  • 绝大部分的行使创设,都是以在 routes/web.php 文件定义路由起头的。

  • routes/api.php 文件中定义的路由通过 RouteServiceProvider
    被嵌套到一个路由组里面。

  • 路由器允许你注册能响应任何 HTTP 请求的路由:

web路由组提供了常见web用户所需的具备效用特色:如session、cookie、CSRF防护等等,比较之下,api路由组更加轻量级,只提供了throttle中间件,以便提供无状态的REST
API。

0x00 路由

www.30064.com 2

路由

怎么扩展路由文件:

2、Laravel 5.3 中路由的修改

基本路由

营造最焦点的路由只要求一个 URI 和一个闭包。所有的 Laravel 路由都在
routes 目录中的路由文件中定义。Laravel 默许提供 web.php 和 api.php
五个路由文件。前者定义 web 页面路由,默许使用 web
中间件组;后者定义无状态路由,会动用 api 中间件组。

Laravel 的 Route Facade 提供了 get, post, put, patch, delete,
options, match, any 等路由艺术来帮忙响应单个、三个、所有的 HTTP
方法。

www.30064.com 3

基本路由

笨方法就直接在/routes/下添加文件后,再在web.php下添加require引用。

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

在Laravel
5.3中,app/Http/routes.php文件被移动到routes目录下,并且被划分成多少个文本:web.php和api.php。你恐怕早就猜到了,web.php中的路由应用了web中间件组,而api.php中的路由应用了api中间件组。

路由参数

Laravel 可以通过二种措施非常由参数的必选、可选及切实格式举行约束。

www.30064.com 4

路由参数

大雅的措施:(参考:

  • Laravel思维导图之Laravel,3中的路由文件与途径。GET 获取资源
  • POST 创建资源
  • PUT 编辑/更新资源(需提交完整的资源字段)
  • PATCH 编辑/更新资源(可以交给需求立异的字段)
  • DELETE 删除资源
  • OPTIONS 服务器允许哪些请求谓词

那么些就是近期可比盛行的RestFul方式常用的,另HTML表单只辅助POST、GET三种请求格局,PUT、PATCH以及DELETE是Laravel中伪造的HTTP请求格局,须要在表单中添加<input
type=”hidden” name=”_method”
value=”PUT(PATCH、DELETE)”>才能见效,还要配置路由。

patch方法用来更新局地资源,那句话大家该怎么知道?
.
只要我们有一个UserInfo,里面有userId, userName,
userGender等10个字段。可您的编排功用因为需求,在某个特其他页面里只可以修改userName,这时候的翻新如何是好?
.
众人平日(为徒省事)把一个暗含了改动后userName的共同体userInfo对象传给后端,做完全更新。但细心想想,这种做法深感有点二,而且真心浪费带宽(纯技术上讲,你不爱惜带宽那是你土豪)。
.
于是乎patch诞生,只传一个userName到指定资源去,表示该请求是一个部分更新,后端仅更新接收到的字段。
.
而put固然也是翻新资源,但须要前端提供的终将是一个完全的资源对象,理论上说,如若你用了put,但却不曾提供全体的UserInfo,那么缺了的那几个字段应该被清空。
.
补充:
.
最终再补充一句,restful只是标准,标准的意趣是如若在豪门都依此行事的话,互换开销会很低,开发功用就高。但不要强制(也没人强制得了),所以你说在你的次第里把措施名从put改成patch没有其余影响,那是本来,因为你的后端程序并没有如约专业对八个主意做差异处理,她的呈现自然是一致的。

诸如此类做有一些益处,首先,大家落到实处了web路由和api路由的离别,其次,可以在应用级层面协会多少个路由文件,最终,将routes移出app目录,对新手而言,可以更快访问到routes目录,并且让app目录完全成为PSR-4自动加载的目录。

命名路由

Laravel 能够为指定路由或者控制器方法命名,也可以为已命名的路由生成 URL。

www.30064.com 5

命名路由

举例:添加一/routes/admin.php文件,作为定义后台管理的路由文件。

  • 你可以动用 match 方法,也得以拔取 any 方法注册一个完成响应所有 HTTP
    请求的路由:

如果您想要自定义或者添加自己的独立路由文件,参考App\Providers\RouteServiceProvider得到思路:

路由组

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

www.30064.com 6

路由组

修改/app/Providers/RouteServiceProvider.php服务提供者文件:

...
public function map()
{
 $this->mapWebRoutes();
 $this->mapApiRoutes();
 //
}

protected function mapWebRoutes()
{
 Route::group([
  'namespace' => $this->namespace, 
  'middleware' => 'web',
 ], function ($router) {
  require base_path('routes/web.php');
 });
}

protected function mapApiRoutes()
{
 Route::group([
  'middleware' => ['api', 'auth:api'],
  'namespace' => $this->namespace,
  'prefix' => 'api',
 ], function ($router) {
  require base_path('routes/api.php');
 });
}

路由模型绑定

Laravel
路由模型绑定提供了一个便民的法子自动将模型注入到路由中,可以隐式绑定,也足以显式绑定。

隐式绑定时,默认绑定 Eloquent 模型的 ID 字段。通过模型的 getRouteKeyName
方法可以自定义绑定键名。

显式绑定则是运用路由的 model 方法来为已有参数申明 class 。

www.30064.com 7

路由模型绑定

添加一主意:

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

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

总结

0x01 路由中间件

Laravel 中间件提供了一种便民的体制来过滤进入应用的 HTTP
请求。可以将中间件想象为一多重的「层」,HTTP
请求必须经过它们才会触发你的应用程序。每一层都可以检测接收的呼吁,甚至足以完全拒绝请求访问您的应用。

广泛的中间件实例包含身份验证中间件、日志中间件、 CSRF
中间件等。多少个单身的中间件仍能够定义为中等件组。Laravel 带有开箱即用的
web 和 api 中间件组。

www.30064.com 8

路由中间件

 /**
     * 定义管理后台的路由文件
     */
    protected function mapAdminRoutes()
    {
        Route::prefix('admin')  //添加admin前缀(可选)
            ->middleware('web') //使用web组别的中间件(可选)
            ->namespace($this->namespace . '\admin') //admin的命名空间(可选)
            ->group(base_path('routes/admin.php')); //引用admin.php文件
    }
  • 针对 web 路由文件中定义的 POST、PUT 或 DELETE 路由的任何 HTML
    表单都应该包涵一个 CSRF 令牌字段,否则,那个请求将会被驳回。

很粗略吗,参照这段代码应该可以很自在成立自己单独的路由文件。以上就是修改Laravel5.3中路由文件及路径的全体内容,希望本文对我们学习Laravel5.3装有协理。

0x02 控制器

控制器可以将有关的哀求处理逻辑组成一个独立的类。是在路由文件中以闭包的款式定义所有的伸手处理逻辑之外的另一种样式。

然后修改map方法,添加一行执行以上办法代码:

你可能感兴趣的小说:

  • Laravel框架路由配置总括、设置技巧大全
  • 跟我学Laravel之路由
  • ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
  • Laravel中得到路由参数Route
    Parameters的四种艺术言传身教
  • Laravel 4
    初级教程之视图、命名空间、路由
  • Laravel
    5框架学习之路由、控制器和视图简介
  • laravel中命名路由的使用办法
  • Laravel中重写资源路由自定义URL的落实格局
  • Laravel路由设定和子路由设定实例分析
  • Laravel学习课程之路由模块
  • Laravel框架模板加载,分配变量及简单路由效率示例
  • Laravel框架路由设置与行使示例

资源控制器

Laravel 资源路由得以将独立的 CRUD
路由指定到一个控制器上,仅仅须求一行代码就足以兑现,那大大进步了后台业务的支付成效。

以照片控制器为例,多少个步骤可以定义好处理所有应用保存的照片 HTTP
请求的事情。

  1. 经过一行命令创设一个控制器
  2. 为那几个控制器注册一个资源路由

资源路由的申明会创立的八个路由来拍卖千头万绪的资源操作,那么些操作都包罗在控制器中了。

www.30064.com 9

资源控制器操作处理

而外提供默许的操作外,可以根据需求对操作举办自定义。

  1. 可以只定义部分资源路由
  2. 可以重写默许的资源路由名称
  3. 能够重写资源路由的默认参数名称
  4. 可以兑现资源 URI 的语言本地化
  5. 可以叠加其余急需的资源控制器

www.30064.com 10

资源控制器

    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        $this->mapAdminRoutes(); //引用管理后台路由文件
    }
<form method="POST" action="/profile">
    {{ csrf_field() }}
    ...
</form>

借助注入与控制器

Laravel
使用服务容器来分析所有的控制器。能够在控制器的构造方法中对任何借助使用项目约束,也足以在控制器方法中利用依赖类型约束。

诸如此类就能便民地在/routes/admin.php文件内定义后台路由了。

  • 一旦要定义重定向到另一个 URI 的路由,能够动用 Route::redirect 方法。

下一步

在下一期中,我将整理 Laravel HTTP
请求、响应及表单验证的相干文化。这么些是富有互联网利用最重点的片段。

探讨导图在导出的进度中会变得模糊,如有要求高清的思考导图源文件,请加微信公众号:up2048,并上涨“脑图”来得到。

– EOF –

 

Route::redirect('/here', '/there', 301);

引进阅读

  • Laravel思维导图:神速学习Laravel之主旨概念
  • 很快学习Laravel体系思维导图之一:入门指南
  • 十五张合计导图带你连忙学习PHP言语基础
  • 自己内心中的网络接口设计到底是哪些的历程?
  • www.30064.com,多平台合并用户系统规划

2、路由定义:

  • 一经你的路由只要求回到一个视图,可以利用 Route::view 方法。

    view 方法有多个参数,其中前七个是必填参数,分别是 URL
    和视图名称。第多个参数选填,可以流传一个数组,数组中的数据会被传送给视图。

可定义的路由请求:

Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
Route::view('/welcome', 'welcome');

Route::view('/welcome', 'welcome', ['name' => 'Taylor']);

 

一呼百应多个请求:

Route::match(['get', 'post'], '/', function () {
    //响应第一参数内的请求,第一参数为数组或字串,第二参数为uri
});

Route::any('foo', function () {
    //响应任意HTTp的请求,第一参数为uri
});

 

路由参数:

参数名在{}内,不能蕴涵-符号。带?号表示可选参数。

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

//uri: http://domain/posts/1/comments/1
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});

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

 可定义正则约束参数:

Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

//全局约束:修改/app/Providers/RouteServiceProvider.php文件的boot方法。这样对所有使用该参数的路由都起约束:
public function boot()
{
    Route::pattern('id', '[0-9]+');  //id参数的全局约束
    parent::boot();
}

 

 

路由命名:

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

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

 

取名的便宜:可拔取命名来生成该链接或重定向等:

// 生成 URL,等效于route('user/profile')
$url = route('profile');

// 生成重定向...
return redirect()->route('profile');

//带参数的路由
Route::get('user/{id}/profile', function ($id) {
    //
})->name('profile');
$url = route('profile', ['id' => 1]);

//检查当前路由是否为某个name定义的:
if ($request->route()->named('profile')) {
        //常用于中间件检测
}

 

 

 路由组:用于大气路由中共享路由属性,如中间件、命令空间。

Route::middleware(['first', 'second']) //按顺序使用first, second中间件
->namespace('Admin') //在 "App\Http\Controllers\Admin" 命名空间下的控制器
->prefix('admin') //匹配包含 "/admin/users" 的 URL
->name('admin.')  //添加路由名称前缀
->group(function () {
    Route::get('/', function () {
        // 
    });

    Route::get('user/profile', function () {
        // 
    });
    Route::get('users', function () {
        // 路由分配名称“admin.users”...
    })->name('users');
});

 

 

Route::domain('{account}.myapp.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //子域名路由
    });
});

 

 

表单方法伪造: HTML 表单中调用定义了 PUTPATCH 或 DELETE 路由。

以下两段代码等效:

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

<form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
</form>

 

 

访问当前路由:

$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();

 

发表评论

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

网站地图xml地图