1-Laravel-Http路由

路由
  • 一次请求的完整实现过程

浏览器发出请求(发送到路由)===》路由解析该请求(根据请求找到相应的控制器)
===》控制器(controller)有两个任务

  • 先和数据模型(module)交易,就是数据库取数据,映射到模型之类的。
  • 再将数据或者经过逻辑处理的结果和显示层(view)交易。
基本路由

所有应用路由都定义在 App\Providers\RouteServiceProvider 类载入的 app/Http/routes.php 文件中。
如下(初始的Laravel项目中的),望代码生义啊,Route的静态方法get能接收一个URL参数(也就是’/’,根目录),还会有回调函数,回调函数返回了一个view(这种直接从路由返回view的应该不常见),就是resource下面的views下面的welcome.blade.php文件,这个文件就是测试页面的源代码页面。

Route::get('/', function () {
    return view('welcome');
});
  • 下面是一些有效路由
    • Route::get( uri, u r i , callback);
    • Route::post( uri, u r i , callback);
    • Route::put( uri, u r i , callback);
    • Route::patch( uri, u r i , callback);
    • Route::delete( uri, u r i , callback);
    • Route::options( uri, u r i , callback);
  • 还能一次匹配多个路由,match可以同时匹配get和post请求,而any则可以匹配所有的请求。
Route::match(['get', 'post'], '/', function () {
    //
});

Route::any('foo', function () {
    //
});
路由参数

(这部分Laraver学院的文档里讲的很好,我就直接copy了)
- 必选参数
有时我们需要在路由中捕获 URI 片段。比如,要从 URL 中捕获用户 ID,需要通过如下方式定义路由参数:

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

可以按需要在路由中定义多个路由参数:(注意到了吗?回调函数function里面传的参数名称不一定要和URL中的一致,顺序对应就OK啦)

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;
});
  • 正则约束
    可以对传来的参数进行正则约束,这种功能还行吧,可能会经常用吧……使用方法很明显,就是加个where,这应该是get方法的返回对象的方法,然后用正则约束。
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]+']);
命名路由

命名路由为生成 URL 或重定向提供了便利。实现也很简单,在定义路由时使用数组键 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');
分组路由

望码生义啊,group静态方法里面,第一个参数传一个数组,这是个关联数组,prefix属性是路由的(admin/user),namespace属性是Controller的前缀(如果不加的话就要写Admin\indexController@user)。还有个什么属性可以自己看看文档,写法就想下面这么写就行了。

Route::group(['prefix'=>'admin','namespace'=>'Admin'],function(){
    Route::any('user','indexController@user');
    Route::any('login','indexController@login');
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值