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

1、路由定义文件:

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

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

怎么增加路由文件:

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

优雅的方法:(参考:https://laravel-china.org/articles/4400/laravel54-add-routing-file)

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

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

添加一方法:

 /**
* 定义管理后台的路由文件
*/
protected function mapAdminRoutes()
{
Route::prefix('admin') //添加admin前缀(可选)
->middleware('web') //使用web组别的中间件(可选)
->namespace($this->namespace . '\admin') //admin的命名空间(可选)
->group(base_path('routes/admin.php')); //引用admin.php文件
}

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

    public function map()
{
$this->mapApiRoutes(); $this->mapWebRoutes(); $this->mapAdminRoutes(); //引用管理后台路由文件
}

这样就能方便地在/routes/admin.php文件内定义后台路由了。

2、路由定义:

可定义的路由请求:

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::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();

Laravel5笔记--路由的更多相关文章

  1. django2笔记:路由path语法

    django2笔记:路由path语法 9月23,Django 发布了2.0a1版本,这是一个 feature freeze 版本,如果没有什么意外的话,2.0正式版不会再增加新的功能了.按照以往的规律 ...

  2. Laravel5.1 路由 -路由分组

    路由分组有啥好处? 有时候啊 一大堆路由它们都有共同的地方,比如都使用一个中间件(过两天写)或是前缀都一样,避免代码重复 我们可以将他们分到一组中. 1 路由分组可以共享哪些属性? 中间件 middl ...

  3. Angular6 学习笔记——路由详解

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  4. laravel5笔记

    数据库表创建E:\PHP\learnlaravel5>php artisan migrate 创建modelE:\PHP\learnlaravel5>php artisan make:mo ...

  5. AngularJS笔记---路由视图

    最近有同事提到过关于ng-view的使用, 其实自己也不懂了,由于最近一直在做AngularJs的Rearch,所以就看了一些关于ng-view的国外博客. 做过ASP.NET MVC4的都知道, 我 ...

  6. ASP.NET MVC4学习笔记路由系统实现

    一.路由实现 路由系统实际是一个实现了ASP.NET IHttpModule接口的模块,通过注册HttpApplication的PostResolveRequestCache 事件对Url路由处理.总 ...

  7. ASP.NET MVC4学习笔记路由系统概念与应用篇

    一.概念 1.路由是计算机网络中的一个技术概念,表示把数据包从一个网段转发至另一网段.ASP.NET中的路由系统作用类似,其作用是把请求Url映射到相应的"资源"上,资源可以是一段 ...

  8. WPF 学习笔记 路由事件

    1. 可传递的消息: WPF的UI是由布局组建和控件构成的树形结构,当这棵树上的某个节点激发出某个事件时,程序员可以选择以传统的直接事件模式让响应者来响应之,也可以让这个事件在UI组件树沿着一定的方向 ...

  9. Nancy in .NET Core学习笔记 - 路由

    前文中,我介绍了Nancy的来源和优点,并创建了一个简单的Nancy应用,在网页中输出了一个"Hello World",本篇我来总结一下Nancy中的路由 Nancy中的路由的定义 ...

随机推荐

  1. QT之两种模态对话框的调用

    模态对话框:就是没有关闭它之前,不能再与同一个应用程序的其他窗口进行交互. 1.show调用 LoginDialog *dlg = new LoginDialog(); dlg->setModa ...

  2. 芯片烧录器编程AT24C02

    网上买了两款芯片烧录器,因为项目用的到.芯片以后的类型可能是IIC 接口的.就选则了一个IIC接口的AT24C02EEPROM.进行尝试.手头上没有这款芯片. 就想起自己单片机上有这款芯片.然后就开始 ...

  3. 牛客练习赛 43 B-Tachibana Kanade Loves Probability

    链接:https://ac.nowcoder.com/acm/contest/548/B 题目描述 立华奏在学习初中数学的时候遇到了这样一道大水题: “设箱子内有 n 个球,其中给 m 个球打上标记, ...

  4. 运维yum语法

    软件管理 ​ 目前流行的软件包格式: 可直接执行的RPM与DEB.源代码形式的gzip与bzip2压缩包 RPM软件包管理 rpm rpm [选项] *.rpm -i --install instal ...

  5. WEB学习笔记11-高可读性的HTML之如何设置网页标题层级

    标题标签指的是<h1>~<h6>这6个标签,统称为<hx>标签. (1)在页面内容的标题部分使用<hx>标签 <h1 class="re ...

  6. 在虚拟机上利用宿主机共享目录编译linux程序

    #前提条件: 宿主机:windows7 虚拟机:REDHAT 开发环境 qt4.7.4 +vs2010 . 代码在windows7 上编译成功 ,运行正常 在linux下编译需要的第三方库已经编译成功 ...

  7. Windows Essentials Movie Maker 安装失败报错 ——问题解决

    Windows Essentials Movie Maker 安装失败报错: (软件包名: wlsetup-all.exe) 查到官方论坛给出了一些回复: https://social.technet ...

  8. Day8 linux软件包管理

    软件包的两种形式      qq.tar.gz  (需要编译 源码翻译成二进制)/ rpm (直接安装) rpm的文件名分为5部分 name名称  version版本编号  release发布次数  ...

  9. ubuntu下绑定串口

    查看有哪些设备连接在你的电脑上 lsusb 得到如图: 查看usb串口上连接的信息,得到不一样的信息 dmesg | grep ttyS* 我使用了一个usb扩展器,这边可以看到,被连接在ttyUSB ...

  10. git配置代理

    1.查看当前代理 git config --global http.proxy 2.配置git走代理,可走http代理也可以走socks5代理,可根据自己的代理协议而定 #http代理 git con ...