API字段映射
打赏作者

lly835

这样写会报错

JellyBool

你哪个地方的toArray写错了吧 @lly835

lly835

这是我全部代码

<?php

namespace App\Http\Controllers;

use App\Lesson;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Response;

class LessonsController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $lessons =  Lesson::all();
        return Response::json([
            'status' => 0,
            'msg' => 'success',
            'data' => $this->transform($lessons)
        ]);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        return Lesson::findOrFail($id);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }

    private function transform($lessons){
        return array_map(function($lesson){
            return [
                'title' => $lesson['title'],
                'content' => $lesson['body'],
                'is_free' => $lesson['free']
            ];
        },$lessons->toArray);
    }
}

JellyBool
$lessons->toArray()

就是这个方法中的:

 private function transform($lessons){
        return array_map(function($lesson){
            return [
                'title' => $lesson['title'],
                'content' => $lesson['body'],
                'is_free' => $lesson['free']
            ];
        },$lessons->toArray);
    }

$lessons->toArray改一下?试试 @lly835

lly835

@JellyBool 改成啥?

JellyBool

@lly835 后面加个括号撒

lly835

ipad 用什么浏览器可以看这个视频啊?

JellyBool

没有使用ipad测试过(没有iphone或ipad),但是android使用chrome或者qq浏览器都可以正常播放 @lly835

super86worm

视频中array_map([$this,'transform'],$lessions->toArray());这种用法还能给transform传递别的参数吗?

JellyBool 回复 super86worm

你看一下这个,看看有没有想法

http://php.net/manual/en/function.array-map.php

xiaoshen 回复 JellyBool

这个里面的$this 是什么?

JellyBool 回复 xiaoshen

就是 this,你可以这样理解,就是执行:$this->transform

zhujie

请教一个问题,在学习laravel做api,前台用了vue+axios。接口如果按照视频中的写法做
Alt text
在前台获取的时候Response.data的话返回如下
Alt text
在页面取到有效数据是需要Response.data.dat写两重才能获取到想要的数据值。
Alt text
Alt text
Response.data.dat后取到想要的数据值。
想问下有没有什么方法不用这么麻烦呢写两重data,是不是我什么地方做的不对呢。

JellyBool 回复 zhujie

后端直接 return $messages;

zhujie 回复 JellyBool

return是可以的,但是我想向你视频里面说的带一些自己的字段,比如status什么显示的话怎么弄呢,也是\Resoponse::json的话就要data.data。这个要怎么弄呢?

JellyBool 回复 zhujie

你看看这个视频下面的评论

https://www.laravist.com/series/dive-into-restful-api-with-laravel/episodes/7

@假如_丶 这位同学

mikezhang

快速创建方法是哪个快捷键?

JellyBool 回复 mikezhang

我按的是 command shift a ,然后输入 add method

xiangxihenli 回复 JellyBool

请问这个add method是phpstorm自带的吗? 我这边输入了,好像没有诶

JellyBool 回复 xiangxihenli

是自带的,你试试 command shift a 搜 add m

xiangxihenli

现在是不是还没有出到写分页?

Stussy

这样写接口速度快好多 赞

JellyBool 回复 Stussy

嗯哼,感谢支持

noikiy

public function index()
{
$lessons = Lesson::all();//bad
return response()->json([
‘status’ => ‘success’,
‘status_code’ => ‘200’,
‘data’ => $lessons->toArray(),
]);
}

ccpone

jelly想问下我的数据为什么不是默认json格式呢,都是一堆挤在一起,环境是mac下自己搭的apache mysql,用PHP artisan server

JellyBool 回复 ccpone

只是没有使用 chrome 插件吧。你的那一堆挤在一起也是 json 吧,只是没有格式化而已

ccpone 回复 JellyBool

哪个插件呢?能来个链接么,没翻墙=。=

JellyBool 回复 ccpone

我用的是 JsonFormatter

你可以找找百度的 前端注释 FEHelper 这个 chrome 插件

ccpone 回复 JellyBool

谢谢啦。。。。。

AidanWJ

你好,返回给请求的做了映射,那比如新增某个用户,怎么把映射的字段变回来呢??

JellyBool 回复 AidanWJ

这个可以具体描述一下么?还是不太清楚你的场景

AidanWJ 回复 JellyBool

比如我有个列表接口,字段做了映射(title_name 对应真实数据库字段的name),那添加的接口对应映射关系肯定也是传title_name(你给人家title_name,没理由人家给你的时候就变name了把),入库前又要变回来把??又写方法变回来?有点强迫症,好不方便的感觉 明明是对应

JellyBool 回复 AidanWJ

入库的时间你用 request 获取一下就行

['name' => request('name')]
AidanWJ 回复 JellyBool

我就想问问有没有优雅点的写法?正的变过来,反过来变回去

JellyBool 回复 AidanWJ

你可以写一个自动转换的方法,转 request()->all() 就行

AidanWJ

又要重新写方法弄么 还是有自带的?

wj00000

5.3通过findOrFail($id)找返回的是一个一维数组,这时候放入array_map()的是数组内的元素(id,title,之类的),通过all找是2维,放入方法的是一个完整的lesson