记录网址: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