[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

栏目: 编程语言 · PHP · 发布时间: 7年前

内容简介:[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

完成跑通 Api 任务之后,领取到了我在趣编程的第一个撰写 Api 的任务,然而一脸茫然,什么是 Api?

API -> Application Programming Interface

应用程序编程接口。嗯,看起来还是很茫然!看看大老大的 CheckList 先把。。

[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

关键点: Table

OK,前期执行了数据库的迁移和填充命令,拿到权限看了 table 之后,大概明白什么意思了。

Api 接口就是要给前端传数据呀!数据哪里来?数据库呗。那不就是一句 all() 就搞定的问题么?

没那么简单,先依葫芦画瓢

研究了一下目录结构,握草这是啥,握草这又是啥?看看别人的代码,控制器怎么就两行? Repositities 什么鬼? Transformer 什么鬼? Entities 又是什么鬼??

万变不离其宗,先从路由着手吧。

$api->get('articles/{article_id}/getComments', 'ArticleController@getComments'); 
 

通过 url 访问控制器里的 getComments 方法。

ok,创建了 getComments 方法,然后呢?一脸茫然。。

看看别人的代码,先依葫芦画瓢吧。

Controller

public function __construct(ArticleCommentInterface $articleCommentInterface)
  {
    $this->ArticleCommentInterface = $articleCommentInterface;
  }
 
  public function getComment($article_id)
  {
    $comments = $this->ArticleCommentInterface->getArticleCommentById($article_id);
    return $this->response->collection($comments, new ArticleCommentTransformer());
  }
 

Interface

public function getComments();
 

Respositities

public function getComments()
{
  return ArticleComment::all()
}
 

Transformer

public function transform(Article $article)
  {
    return [
      'id'                   => $article->id,
       ...    
    ];
  }
 

Entities

 public function comments()
  {
    return $this->hasMany(ArticleComment::class, 'article_id', 'id');
  }
  ...
 

建立了无数个文件之后,心中万头草泥马飞奔而过,我就拿个数据,怎么要建立这么多文件。。。这 hasmany 是什么鬼,transform 为啥要 return 这一堆东西,Respositities 倒是懂了,数据库操作的地儿。Interface 则是接口,和 Respositities 绑定。在 Respositities 中实现 interface 的方法。熟悉面向对象的小伙伴懂得。

哦对了,测试数据需要提供 token。教程在这里

测试,完美!提交初审咯~

不合格!

你这些 article id,user id 给前端展示数字吗!把具体 title,username 返回!一堆数字是要造反吗!

打回重写

行,要具体数据是吧,那我就一个个 find 出来,一个个 select 出来,一个个 foreach 出来你满意了吧~

[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

这样你总满意了吧?

不行,我不满意。这么多 find 是要造反吗?别人的代码怎么这么简洁? entities 的代码怎么没用?直接返回 json 还要 transformer 干什么?一条请求连接这么多次数据库,服务器不想要了?

没日没夜(在地铁拿着手机当小说看了一会儿)地钻研了 laravel 文档 ORM 模块,hasmany,belongsto 好像很厉害的样子哦哟

respositities 返回一个 collection 传给 transformer 那么 transformer 拿到了好多id数据

见证奇迹的时刻!

public function transform(ArticleComment $comments)
  {
    $articleInfo = $comments->article;
    $user = UserInfo::select('real_name')->find($articleInfo->created_user_id);
 
    return [
      'article_title'            => $articleInfo->title,
      'article_user'             => $user->real_name,
      'is_evaluator'             => $comments->is_evaluation,
      'comment_content'          => $comments->content,
      'comment_created_user'     => $comments->user,
      'replied_comment'          => $comments->reply,
      'replied_user'             => $comments->repliedUser,
      'created_at'               => $comments->created_at
    ];
  }
 

这里的 user,reply,replyuser 实际上,都是 entities 里的方法。通过 hasmany 实现了多表查询的功能,只要再接上select,想要什么字段就返回什么字段啦。然后根据 UI 图,你要啥,我都给!

这下子,才能提交初审哟

这个项目架构好像很厉害

[Laravel] 趣编程之技术文章评论列表 Api 任务的开发心得

大概是这样的一个流程吧。

当然这个 Api 还有不足的地方,比如没有实现分页。关于分页,咱们有得聊。下回见喽~


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Essential C++中文版

Essential C++中文版

李普曼 (Stanley B.Lippman) / 侯捷 / 电子工业出版社 / 2013-8-1 / CNY 65.00

本书以四个面向来表现C++的本质:procedural(面向过程的)、generic(泛型的)、object-based(基于对象的)、objectoriented(面向对象的)。全书围绕一系列逐渐繁复的程序问题,以及用以解决这些问题的语言特性来组织。循此方式,你将不只学到C++的功能和结构,也可学到它们的设计目的和基本原理。 本书适合那些已经开始从事软件设计,又抽不出太多时间学习新技术的程......一起来看看 《Essential C++中文版》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具