2 人点赞

课程内容

laravel 里面什么是路由

这里路由就相当于我的入口,比如现实中的超市入口,超市北门入口等,这里定义了这些入口,我们才能够通过入口进入我们的应用里面。

Laravel 的路由方法

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

序号方法描述
1get请求指定的页面信息,并返回实体主体。
3post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。修改或是其他POST操作
4put从客户端向服务器传送的数据取代指定的文档的内容,用于修改
5delete请求服务器删除指定的页面,用于删除
7options 允许客户端查看服务器的性能。
9patch是对 PUT 方法的补充,用来对已知资源进行局部更新 。

常用方法

序号方法描述
1get请求指定的页面信息,并返回实体主体。
3post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。修改或是其他POST操作
4put从客户端向服务器传送的数据取代指定的文档的内容,用于修改
5delete请求服务器删除指定的页面,用于删除

多个路由方法允许

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

//任意方式
Route::any('/', function () {
    //
});

CSRF 保护

POSTPUTDELETE 路由的任何 HTML 表单都应该包含一个 CSRF 令牌字段

重定向路由,就是说直接跳转到其他路由去

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

视图路由,直接返回给视图,不经过控制器

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

路由定义参数

比如我们需要访问
https://www.heibaiketang.com/forum/show/163.html
其中163表示我们需要传入的参数

//使用匿名函数
Route::get('forum/show/{id}.html',  function ($id) {
        return 'show '.$id;
});
或绑定控制器
Route::get('forum/show/{id}.html', 'ForumController@show');
或
Route::get('forum/show/{id}.html', ['uses'=>'ForumController@show']);//支持数组形式

如果多个参数可以不断的加,后面加{参数名字}即可

Route::get('forum/show/{id}/{t}.html',  function ($id,$t) {
        return 'show '.$id.',t='.$t;
});

可选参数就是可有可无的,比如我们的分类,有时候我们没有传入分类,那么默认就是空咯,也就是主目录

Route::get('forum/{cate?}', 'ForumController@index');

Route::get('forum/{cate?}',  function ($cate='') {
        return $cate;
});

路由正则,一般用于限制我的参数

这样只能够访问英文字符的参数

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

多个,写多个数组

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

全局约束,有时候我们需要把id全部设置为数字

Route::pattern('id', '[0-9]+');

这个位置,在路由文件上面定义就好了,虽然你也可以定义在其他地方,比如RouteServiceProviderboot 方法中定义这些模式:

public function boot()
{
    Route::pattern('id', '[0-9]+');

    parent::boot();
}

路由命名

相当于我们每条访问地址,都有个名字,那样我们调用或者使用的时候,更加方便

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

Route::get('forum', 'ForumController@index')->name('forum');

使用,生成路由的地址

$url = route('forum');

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

如果有参数可以

return redirect()->route('forum',['cate'=>'hello','key'=>'搜索关键词']);

那么上面会生成
http://www.xx.com/forum?cate=hello&key=搜索关键词

如果是这样子的路由

Route::get('forum/show/{id}.html', 'ForumController@show')->name('forum.show');

//调用
 route('forum.show',['id'=>222]);

http://www.xx.com/forum/show/222.html
继续加参数

route('forum.show',['id'=>222,'key'=>'hello']);

http://www.xx.com/forum/show/222.html?key=hello

路由资源控制器

常常用于后台路由配置

Route::resource('photos', 'PhotoController');
HTTP 方法 URI 动作 路由名称
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/{photo} show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/{photo} update photos.update
DELETE /photos/{photo} destroy photos.destroy

路由名称,根据你的路径名字来给的。

路由组

相当于就是一个组合一样,比如我们有个组合名字之后,或者是目录,那么我们就不需要每个地方都带上这个标签

Route::group(function(){
    Route::get('/', function () {
        // 使用 first 和 second 中间件
    });
})

增加组的前缀路径,比如
https://www.heibaiketang.com/forum
https://www.heibaiketang.com/forum/php
https://www.heibaiketang.com/forum/show/132.html
这里我需要组合一下

$route->group(['prefix' => 'forum'], function ($route) {
    $route->get('/{ename?}', 'ForumController@index')->name('forum');
    $route->get('/show/{id}.html', 'ForumController@show')->name('forum.show');
});

如果我还想要增加其他的参数,都是可以的,比如前缀命名,中间件等

//和上面的作用一样,这是定义了一个前缀的路由命名,这里是`as`
$route->group(['prefix' => 'forum','as'=>'forum'], function ($route) {
    $route->get('/{ename?}', 'ForumController@index')->name('');
    $route->get('/show/{id}.html', 'ForumController@show')->name('.show');
});

这里用了数组形式,当然也可以单独设置

Route::namespace('Admin')->group(function () {
    // 在 「App\Http\Controllers\Admin」 命名空间下的控制器
});

Route::name('admin.')->group(function () {
    Route::get('users', function () {
        // 指定路由名为 「admin.users」...
    })->name('users');
});

中间件

单个使用

Route->get('/', 'UserController@index')->name('user')->middleware('auth');

Route->get('/', ['as'=>'user','uses'=>'UserController@index','middleware'=>'auth']);

上面2个都是一样的效果,这是换了一种形式,看个人喜好,这里转换就是name的时候要写成`as`

子域名路由

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

限流

throttle 中间件会接收两个参数,这两个参数决定了在给定的分钟数内可以进行的最大请求数

//每分钟最多 60 次请求
Route::middleware('auth:api', 'throttle:60,1')->group(function () {
    Route::get('/user', function () {
        //
    });
});

//可以为访客指定每分钟最多 10 次请求,为认证用户设置每分钟最多 60 次请求

Route::middleware('throttle:10|60,1')->group(function () {
    //
});

表单方法伪造

HTML 表单不支持 PUT 、PATCH 或 DELETE 行为。所以当你要从 HTML 表单中调用定义

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

路由重要信息

 Route::current(); // 当前路由信息,返回对象object
 Route::currentRouteName();//当前路由名字,plugin.forum.sitemap
 Route::currentRouteAction();//当前路由绑定控制器名字和方法:App\Plugin\Forum\Front\SiteMapController@index

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。