laravel路由基础
基础:
所有的laravel路由都定义在 app/Http/routes.php 这个文件里,会被框架自带加载。简单的路由会接受一个URI和一个Closure类。
Route::get('foo', function () {
return 'Hello World';
});
默认的routes.php 是被RouteServiceProvider所加载进入框架的,允许自定义路由和响应
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
html是不支持PUT DELETE 等方法的,所以需要伪造一下
表单中加入隐式的_method方法和value值 <form action="/foo/bar" method="POST">
<input type="hidden" name="_method" value="PUT">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
</form> 也可以通过 method_field('PUT')
输出
<input type="hidden" name="_method" value="PUT">
如果需要一个路由对多个HTTP请求进行相应,可以使用math方法或者any方法
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('foo', function () {
//
});
通过Route::current()访问当前的路由
$route = Route::current(); $name = $route->getName(); $actionName = $route->getActionName();
$name = Route::currentRouteName(); $action = Route::currentRouteAction();
二 路由参数
必选参数
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
或者
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
可选参数 加个问号就是可以选参数
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
return $name;
});
参数约束
对路由中的URI参数进行约束,通过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]+']);
全局约束
可以在RouteServiceProvider中的 boot 方法中 对给定的路由参数进行全局约束
位于app\Http\Provider\RouteServiceProvider.php中
public function boot(Router $router)
{
$router->pattern('id', '[0-9]+'); parent::boot($router);
}
之后访问id会自动进行约束
Route::get('user/{id}', function ($id) {
// Only called if {id} is numeric.
});
路由重命名
通过在路由定义数组中使用 as 参数可以为路由重新定义方法
Route::get('user/profile', ['as' => 'profile', function () {
//
}]);
也可以同时定义控制器
Route::get('user/profile', [
'as' => 'profile', 'uses' => 'UserController@showProfile'
]);
也可以通过链式调用name函数来定义
Route::get('user/profile', 'UserController@showProfile')->name('profile');
路由群组
通过在群组属性数组中定义一个 as属性为群组定一个公共前缀
Route::group(['as' => 'admin::'], function () {
Route::get('dashboard', ['as' => 'dashboard', function () {
// Route named "admin::dashboard"
}]);
});
测试
定义路由群组:
Route::group(['as' => 'admin::'], function(){
Route::get('groupsub', ['as' => 'sub', function(){
echo "in route group";
}]);
});
通过路由群组前缀访问路由:
Route::get('/test', function(){
return redirect() -> route('admin::sub');
});
访问http://localhost/test时会被重定向到
http://localhost/groupsub输出
in route group
CSRF验证
使用 csrf_token()生成token值添加到表单中laravel会自动验证
<input type="hidden" name="_token" value="csrf_token()“ /> 使用 csrf_field() 自动生成字段
<?php echo csrf_field(); ?>
生成
<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
通过在VerifyCsrfToken 中except数组中可以添加不验证的路由VerifyCsrfToken.php文件中
class VerifyCsrfToken extends BaseVerifier
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
//此处添加
];
}
laravel路由基础的更多相关文章
- Laravel 框架 基础(一)
Laravel 框架 laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持.隐式模型绑定.简化 Eloquent 全局作用域.可选择的认证脚手架.中间件组. ...
- laravel框架基础知识总结
一.laravel简介 laravel是一套优雅简介的PHP开发框架,受欢迎程度非常之高,功能强大,工具齐全:以下是本人在学习过程中记录的laravel比较基础的资料,权当学习笔记,请大神们多多指教 ...
- 原来 laravel 路由 参数可以为可选。。。 很灵活
基本路由 您的应用程序的绝大多数路由将在 app/routes.php 文件中定义.Laravel 中最简单的路由由一个 URI 和一个闭包调用组成. 基本 GET 路由 复制代码代码如下: Rout ...
- laravel路由无法访问,报404,No query results for model [App\Models\...]
今天遇到了一个问题,在routes/web.php中配置了路由,但始终无法访问该路由,一直报404. Route::resource('gift_packs', 'GiftPacksControlle ...
- laravel 路由分組
laravel 路由分組 Route::group(['prefix' => 'admin'], function () { $namespacePrefix="\\App\\Http ...
- 一、数据库表中字段的增删改查,二、路由基础.三、有名无名分组.四、多app共存的路由分配.五、多app共存时模板冲突问题.六、创建app流程.七、路由分发.八、路由别名,九、名称空间.十、反向解析.十一、2.x新特性.十二、自定义转换器
一.数据库表中字段的增删改查 ''' 直接在modules中对字段进行增删改查 然后在tools下点击Run manage.py Task执行makemigrations和migrate 注意在执行字 ...
- react router @4 和 vue路由 详解(一)vue路由基础和使用
完整版:https://www.cnblogs.com/yangyangxxb/p/10066650.html 1.vue路由基础和使用 a.大概目录 我这里建了一个router文件夹,文件夹下有in ...
- django第三天(路由基础和路由分配)
路由基础 url(正则路径,视图函数地址,默认关键字参数,路由别名) 路由由上而下匹配, ""可以匹配任意路由 "^$"来匹配"/" url ...
- Laravel路由中不固定数量的参数如何实现?
前言 laravel是个好框架,我也在学习和使用,并且在公司里推广,最近在读 Laravel 源码的时候,发现了一个段特别有趣的代码,大家请看: ... 这三个点是做什么用的呢?我查了 PHP 的手册 ...
随机推荐
- IOS OC 计算器算法(不考虑优先级)
个人见解:为还在计算器算法方面迷惑的同学一个数据处理解决方案:定义一个可变数组array,一个可变字符串str,使字符通过[array addObject:str];方法添加到可变数组,每当触发运算符 ...
- Linux常用服务部署与优化之NFS篇
NFS(network file system)的简称,是linux系统之间常用的一种文件共享方式,下面简述其搭建过程,需要两个linux系统的虚拟机,假设客户端的ip为192.168.1.105,服 ...
- Comet、SSE、技术
1.概念: 利用长时间保留的HTTP请求(‘挂起的GET’)来让服务器向浏览器推送数据的技术,经常被称为Comet. SSE让服务器可以向客户端流式发送文本消息,比如服务器上生成的实时通知或更新.
- 新创建一个git远程仓库
1.git 服务器项目初始化已经完毕,请把相关的资料和源码上传到git服务器. 2.第一次需要clone,执行命令:git clone git@192.168.10.184:listenbox_mc_ ...
- 升级10.11.6后CocoaPods的坑,之前10.11.4已经安装好的,居然没了Failed to locate Homebrew!
升级10.11.6后CocoaPods的坑,之前10.11.4已经安装好的,居然没了,用命令 sudo gem install cocoapod 装不上,换 sudo gem install -n/u ...
- Description DisplayName Display的关系
Description DisplayName Display的关系 ?
- Saltstack pillar组件
pillar组件 pillar也是Saltstack最重要的组件之一,其作用是定义与被控主机相关的任何数据,定义好的数据可以被其他组件使用,如模板.state.API等.在pillar中定义的数据与 ...
- redis入侵小结
redis安装: windows安装包:http://pan.baidu.com/s/1i3jLlC5 下载下来之后,开始安装: redis-server.exe redis.conf: 简单一步,安 ...
- mysql数据表分表策略2(转)
mysql分表方法: 方法一. 做数据库集群! 主从数据库 双向热备份(或一对多的数据库实时备份策略),这样可将数据库查询分摊到几个服务器去(可跟服务器负载均衡结合起来架构) 优点:扩展性好,没有多个 ...
- Asp.Mvc中的text实现 辅助用户输入 灰色字体
在开发Web应用程序中经常需要用户在文本框输入信息,为了提高程序人性化设置以及用户体验效果常常需要在文本框中显示灰色字体辅助用户输入 如: