Laravel5.2中HTTP路由、创建控制器和资源路由的介绍(附代码)

发布时间 - 2019-01-19 00:00:00    点击率:

本篇文章给大家带来的内容是关于laravel5.2中http路由、创建控制器和资源路由的介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

一、HTTP路由

所有路由都定义在 App\Providers\RouteServiceProvider 类载入的 app/Http/routes.php文件中。

1. 基本路由

简单的 Laravel 路由只接受一个 URI 和一个闭包

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

对于常见的 HTTP 请求,Laravel 有以下几种路由

Route::get($uri, $callback); //响应 get 请求
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
 
Route::match(['get', 'post'], $uri, $callback); //响应 get, post 请求
Route::any('foo', $callback); //响应所有请求

其中,$callback 可以是一个闭包,也可以是一个控制器方法。实际上,在开发中有不少情况是用作控制器方法的。  

2. 路由参数

//单个路由参数
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});
//多个路由参数
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
    //
});
//单个路由参数(可选)
Route::get('user/{id?}', function ($id = 1) {
    return 'User '.$id;
});
//多个路由参数(可选)
Route::get('posts/{post}/comments/{comment?}', function ($postId, $commentId = 1) {
    //
});
//注意:多个参数时,只可以对最后一个参数设置可选,其他位置设置可选会解析错误
 
// 正则约束单个参数
Route::get('user/{name?}', function ($name = 'Jone') {
    return $name;
})->where('name', '\w+');  //约束参数为单词字符(数字、字母、下划线)
 
// 正则约束多个参数
Route::get('user/{id}/{name}', function ($id, $name) {
    //
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);

二、创建控制器

使用 Artisan 命令创建 php artisan make:controller UserController 

现在,在 app/Http/Controllers 这个控制器目录下就生成了 UserController.php 的控制器文件。

三、高级路由

1. 命名路由

//命名闭包路由
Route:get('user', array('as' => 'alial', function(){});
//或 name 方法链
Route:get('user', function(){})->name('alias');
 
//命名控制器方法路由
Route:get('user', array('uses' => 'Admin\IndexController@index', 'as' => 'alias'));
//或 name 方法链
Route:get('user', 'Admin\IndexController@index')->name('alias'));

2. 路由分组

2.1 路由前缀和命名空间

例如,有两条指向控制器方法的路由

Route::get('admin/login', 'Admin\IndexController@login');
Route::get('admin/index', 'Admin\IndexController@index');

拿第一条来说,

参数一:admin/login  表示这个 URI 在请求网站根目录下的 admin/login 资源,完整地址就是  http://域名/admin/login (这里开启了 Apache 的路由重写,隐藏了 “index.php“ ),这个请求被映射到第二个参数中指定的控制器方法。注意,网站根目录是入口文件所在目录,在 Laravel 中就是 public 目录,配置服务器时最好也指向这里。

参数二:Admin\IndexController@login 表示这个控制器方法是在 App\Http\Controllers 命名空间下的,连起来就是 App\Http\Controllers\Admin\IndexController 控制器里的 login 方法。

显然,两条路由的 URI 和 控制器方法 都有相同的部分,那么,启用路由分组可以提取出公共部分:

// 第一个数组参数中,prefix 键定义 URI 的公共部分,namespace 键定义方法名(命名空间语法)的公共部分
Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function(){
    Route::get('login', 'IndexController@login');
    Route::get('index', 'IndexController@index');
});

2.2 资源路由

资源路由就是映射到资源控制器的路由,Laravel 资源控制器内置了对资源增删改查的 7 个方法以及 7 条路由。

首先,创建资源控制器 ArticleController

php artisan make:controller Admin/ArticleController  --resource

这样就生成了资源控制器在 app/Http/Controllers/Admin/ArticleController.php 文件(Admin 文件夹不存在时会自动创建),内置的 7 个方法如下 :

id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }
 
    /**
     * 显示一个表单来编辑指定的资源
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }
 
    /**
     * 更新指定的资源
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }
 
    /**
     * 删除指定的资源
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

然后,定义资源路由 。这里我还是选择在路由分组下定义,定义一条就好

Route::group(array('prefix' => 'admin', 'namespace' => 'Admin'), function(){
    Route::get('login', 'IndexController@login');
    Route::get('index', 'IndexController@index');
    // 资源路由
    Route::resource('article', 'ArticleController');
});

最后,查看路由。有了资源控制器 和 资源路由,就可以看一下对以上 7 个方法的 HTTP 请求方式了。

使用 Artisan 命令 php artisan route:list  列出当前的所有路由,请求方式、URI、控制器方法、中间件都罗列出来了。


# 多个  # 可选  # 是一个  # 两条  # 表单  # 是在  # 都有  # 就好  # 中有  # 下划线 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  如何在宝塔面板中创建新站点?  javascript事件捕获机制【深入分析IE和DOM中的事件模型】  JavaScript数据类型有哪些_如何准确判断一个变量的类型  如何在Windows环境下新建FTP站点并设置权限?  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  如何在阿里云购买域名并搭建网站?  ,交易猫的商品怎么发布到网站上去?  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  php做exe能调用系统命令吗_执行cmd指令实现方式【详解】  C#如何调用原生C++ COM对象详解  如何在云主机上快速搭建网站?  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  如何快速辨别茅台真假?关键步骤解析  如何在新浪SAE免费搭建个人博客?  android nfc常用标签读取总结  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  香港服务器如何优化才能显著提升网站加载速度?  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  网易LOFTER官网链接 老福特网页版登录地址  高端智能建站公司优选:品牌定制与SEO优化一站式服务  Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验  网站制作软件免费下载安装,有哪些免费下载的软件网站?  如何将凡科建站内容保存为本地文件?  PythonWeb开发入门教程_Flask快速构建Web应用  如何在 React 中条件性地遍历数组并渲染元素  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  Laravel中DTO是什么概念_在Laravel项目中使用数据传输对象(DTO)  微信h5制作网站有哪些,免费微信H5页面制作工具?  如何实现javascript表单验证_正则表达式有哪些实用技巧  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  canvas 画布在主流浏览器中的尺寸限制详细介绍  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  用v-html解决Vue.js渲染中html标签不被解析的问题  非常酷的网站设计制作软件,酷培ai教育官方网站?  网页设计与网站制作内容,怎样注册网站?  中山网站推广排名,中山信息港登录入口?  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  如何快速搭建支持数据库操作的智能建站平台?  Laravel如何实现本地化和多语言支持_Laravel多语言配置与翻译文件管理  Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】  利用JavaScript实现拖拽改变元素大小  千库网官网入口推荐 千库网设计创意平台入口  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Linux系统命令中tree命令详解  如何安全更换建站之星模板并保留数据?  Laravel怎么在Controller之外的地方验证数据