Laravel 第六章 帖子数据

记录网址:laravel controller_那扎的博客-CSDN博客    

laravel controller介绍

记录语句:清空并重新自动加载

$ php artisan clear-compiled

$composer dump-autoload

一、分类列表

分类列表

在这个章节中,我们将开发帖子分类的获取接口,方便我们在下一章节『发布话题』中使用。

由于直接看当前第六章节,之前的内容中包含配置composer ,按照下方执行后一直报错 class ... does not exit

所以按照一下步骤进行配置

1)首先来搭建一下基础环境,创建一个基础 Controller,此类作为所有 API 请求控制器的【基类】。

$ php artisan make:controller Api/Controller

注意我们增加了一个命名空间 Api,以后接口相关的控制器,统一会放在 Api 目录中,会让代码结构更清晰。前面提到过接口版本控制的重要性,我们还可以在 Api 目录中增加 V1,V2 等目录,进一步区分不同版本的接口,为了教学方便,我们暂时不做进一步区分。 将 Controller.php 文件替换为以下的内容。

app/Http/Controllers/Api/Controller.php

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use Dingo\Api\Routing\Helpers;
use App\Http\Controllers\Controller as BaseController;

class Controller extends BaseController
{
    use Helpers;
}

注意上面的基础代码中,我们增加了 DingoApi 的 helper,这个 trait 可以帮助我们处理接口响应,后面我们在使用到的时候,我们会对其提供的功能做一一讲解。我们新建的 Api 控制器都会继承这个基础控制器。

下面我们开始写第一个接口 发送短信验证码,先添加路由

routes/api.php

<?php

use Illuminate\Http\Request;

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', [
    'namespace' => 'App\Http\Controllers\Api'
], function($api) {
    // 短信验证码
    $api->post('verificationCodes', 'VerificationCodesController@store')
        ->name('api.verificationCodes.store');
});

上面的代码中,我们增加了一个参数 namespace,使 v1 版本的路由都会指向 App\Http\Controllers\Api,方便我们书写路由。

接下来创建 VerificationCodes 的控制器

修改文件如以下:

app/Http/Controllers/Api/VerificationCodesController.php

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;

class VerificationCodesController extends Controller
{
    public function store()
    {
        return $this->response->array(['test_message' => 'store verification code']);
    }
}

通过 artisan 创建出来的控制器,默认会继承 App\Http\Controllers\Controller,我们只需要删除 use App\Http\Controllers\Controller 这一行即可,这样会继承相同命名空间下的 Controller,也就是我们上一步中添加的那个控制器。

增加了 store 方法,利用 DingoApi 的 Helpers trait,我们可以使用 $this->response->array 返回一个测试用的响应。接下来使用 PostMan 访问 发送短信验证码 接口,注意使用 POST 方式提交。

2)添加路由——routes/api.php

其中->get为调用get方法,get(param1, param2) param1:新建的Controller类  param2:调用的方法

->name  name则是对你的路由别名,与dingo/api 没有关系,是laravel 自带的功能

可以参考网址:路由 | 基础功能 |《Laravel 5.5 中文文档 5.5》| Laravel China 社区

$api->version('v1', [
    'namespace'=>'App\Http\Controllers\Api'
],function($api){
    $api->get('categories', 'CategoriesController@index')->name('api.categories.index');
});

3)创建Transformer  用于显示哪些数据(类似于创建类,类中有变量用于显示)

$ touch app/Transformers/CategoryTransformer.php

修改如下

app/Transformers/CategoryTransformer.php

<?php

namespace App\Transformers;

use App\Models\Category;
use League\Fractal\TransformerAbstract;

class CategoryTransformer extends TransformerAbstract
{
    public function transform(Category $category)
    {
        return [
            'id' => $category->id,
            'name' => $category->name,
            'description' => $category->description,
        ];
    }
}

4)、创建controller  由于需要大量的处理代码处理返回信息和操作,所以将有共同特征的路由处理函数放到一个共同的控制器中

php artisan make:controller Api/CategoriesController

修改如下

app/Http/Controllers/Api/CategoriesController.php

<?php

namespace App\Http\Controllers\Api;

use App\Models\Category;
use Illuminate\Http\Request;
use App\Transformers\CategoryTransformer;

class CategoriesController extends Controller
{
    public function index()
    {
        return $this->response->collection(Category::all(), new CategoryTransformer());
    }
}

分类数据是集合,所以我们使用 $this->response->collection 返回数据。

1. 添加路由

回忆一下 Larabbs 的模型关系,每一个话题一定会属于某个分类,所以发布话题的时候,我们会从列表中选择一个分类,APP 首页也会显示出来不同分类便签,便于切换。

新增 分类列表 接口,分类列表是游客可访问的接口,不需要 token 验证。

routes/api.php

 

猜你喜欢

转载自blog.csdn.net/jiangyangll/article/details/89636071
今日推荐