zoukankan      html  css  js  c++  java
  • Laravel-RestfulAPI 资源控制器(全面详解)

    前言:RESTful是一种设计思想、一种普遍接受的规范。我们的资源控制器,和RESTful有着莫大的联系,要理解资源控制器,必须先了解RESTful。

    背景介绍

        REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的。
    
        Fielding是一个非常重要的人,他是HTTP协议(1.0版和1.1版)的主要设计者、Apache服务器软件的作者之一、Apache基金会的第一任主席。所以,他的这篇论文一经发表,就引起了关注,并且立即对互联网开发产生了深远的影响。
    
        Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。
    
        如果一个架构符合REST原则,就称它为RESTful架构。
    
        要理解RESTful架构,最好的方法就是去理解Representational State Transfer这个词组到底是什么意思,它的每一个词代表了什么涵义。如果你把这个名称搞懂了,也就不难体会REST是一种什么样的设计。
    

    一、控制器生成

    Laravel的资源控制器原生的支持了RESTful架构。其实laravel的资源控制器和其他控制器没什么直接区别,只是对控制器类的方法和结构略有规定,不过我们并不要手动创建资源控制器,我们可以利用laravel的命令行工具——artisan

    laravel框架根目录下,通过命令行输入命令

    php artisan make:controller TestController  
    

    注意:在laravel5.1中用php artisan生成的控制器会有默认的方法indexcreateshowedit...等等;如果不是使用Restful不需要默认的方法可以在laravel框架根目录下,通过命令行输入命令

    php artisan make:controller TestController --plain  
    

    laravel5.2以后生成控制器是默认没有indexcreateshowedit..等几个方法的,如果想生成默认的方法 可以在laravel框架根目录下,通过命令行输入命令

    php artisan make:controller TestController --resource  
    

    就可以创建一个名为TestController的资源控制器,文件默认在app/Http/Controllers下。我们打开TestController.php,发现里面已经写好了许多方法,比如index、create、show等等。分别是什么意思?如何在路由定义才能访问到?

    我们如果要在路由里定义一个资源控制器只需要一条:

    Route::resource('/test', 'TestController');  
    

    下面介绍下RESTful的跳转规则:

    请求URL: /test  
    请求方式:GET  
    默认进入控制器的方法:index()  
    一般用于:页面展示/列表展示
    
    请求URL: /test/create 
    请求方式:GET  
    默认进入控制器的方法:create()  
    一般用于:添加/新建
    
    请求URL: /test  
    请求方式:POST  
    默认进入控制器的方法:store()
    
    请求URL: /test/{id}/edit  
    请求方式:GET  
    默认进入控制器的方法:edit($id)
    一般用于:修改页面
    
    请求URL: /test/{id}  
    请求方式:PUT  
    PUT方法需要定义一个隐藏表单  
    <input type="hidden" name="_method" value="put"/>  
    默认进入控制器的方法:update($id) 
    一般用于:接收修改的方法
    
    请求URL: /test/{id}  
    请求方式:GET  
    默认进入控制器的方法:show($id)
    一般用于:XX详情 
    
    请求URL: /test/{id}  
    请求方式:GET  
    默认进入控制器的方法:destroy($id)
    一般用于:删除
    

    大概举两条解释。

    我定义了个资源路由

    Route::resource('/test', 'TestController');  
    

    当我访问地址http://www.blog8090.com/test,相当于访问控制器TestControllerindex方法。

    当我访问地址http://www.blog8090.com/test/create,就会访问到create方法。

    当我通过POST提交数据至地址http://www.blog8090.com/test,相当于由store方法处理。

    现在理解了吗?通过资源控制器,我们很容易实现一个符合RESTful架构的接口,这种很适合作为APP后端开发时使用。这种规范下,不但访问策略清晰易理解,更容易维护。也使你的架构更为合理和现代化。

    简单举例如果在路由中全部定义

    Route::get('/test', 'TestController');  
    Route::post('/test', 'TestController');  
    Route::get('/testEdit', 'TestController@edit');  
    Route::post('/testUp', 'TestController@up');  
    Route::controller('/addTest','TestController');  
    

    Restful写法(写一个路由可以包含很多种动作,当然有些特定方法不够用的时候也得指定方法)会让臃肿的路由更加简易

    Route::resource('/test', 'TestController');  
    Route::resource('/test_blog', 'TestController@blog');  
    

    是不是比较起来要幽雅的很多??

    [原文地址](http://www.blog8090.com/)

  • 相关阅读:
    解析数据库xml格式字段
    Spring切面表达式,hibernate,struts
    常见枚举
    经典冒泡排序,九九乘法表,三角形
    拦截器后台安全验证
    Oracle 将表中多条数据同一字段拼成一列显示
    idea 11 控制台日志乱码
    BigDecimal 分转元,元转分
    currtDownLatch可能会出现的三个问题
    CountDownLatch用法
  • 原文地址:https://www.cnblogs.com/jhcyzxx/p/10479937.html
Copyright © 2011-2022 走看看