perfectboook

1403 经验值

@sodasix 恩恩,就是有时就一个新闻,就需要好几种返回的方式,就得写好几个transformer

@sodasix 恩,这个不是主要问题,主要是列表和详细的返回字段不一致,没有办法使用同一个transformer。还有就是关联到其他表的情况。

@JellyBool 恩,不需要的字段设置空会有很多多余的空字段。而且不光是字段,还有些关联表数据。暂时就先这样了,理解起来也不算麻烦。

暂时算是解决了,写一下解决的办法。谁有更好的办法可以和我说下。

第一个问题是区分为两个transformer,不多说,第二个关联多个评论的解决代码为:

NewsTransformer.php

public function transform($item)
{
    return [
        'id' => $item->id,
        'title' => $item->title,
        'created_at' => $item->created_at . '',
        'content' => $item->content,
        'comments' => $this->transformComments($item->comments()->take(3)->get()),
        'comments_count' => $item->comments->count(),
    ];
}

public function transformComments($comments)
{
    //这里不可以使用array_map,转换为数组后会导致NewsCommentsTransformer里面获取错误。
    $array = [];
    foreach ($comments as $news_comments){
        $array[count($array)] = (new NewsCommentsTransformer)->transform($news_comments);
    }
    return $array;
}

NewsCommentsTransformer.php

public function transform($item)
{
    return [
        'id' => $item->id,
        'content' => $item->content,
        'userid' => $item->user_id,
        'username' => $item->user->name,
        'created_at' => $item->created_at . ''
    ];
}

我开发一个api,使用的是 dingo/api 这个库,比如news,会有 api/news 和 api/news/1 这种。要返回字段并不一样,比如 api/news 不会返回content,评论等。写 transform 的时候就没办法区分列表或者是单一的新闻。我现在的办法是分成两个转换类 NewsListTransformerNewsTransformer 来使用。不知道还有没有更好的办法。

另外还有一个问题是,新闻是有评论的,读取单个新闻的时候,会一起读出来3条新闻评论。这个评论也是需要转换的,单条的可以通过 (new CommentsTransformer)->transform($item) 来转换,多条的这个办法就行不通了。

检查路由中是否加入了名为web的middleware..

删除记录是用的DELETE方式提交的,链接实现不了这种方式,你需要在route里面加上一条GET记录,重写一下删除的url。如Route::get('test/destroy/{id}', 'TestController@destroy');这样。

caouecs/Laravel-lang 搞一个zh-CN的语言包,放到 resources/lang 里面。然后在 config/app.php 里面把 locale 设置成 zh-CN。就行了。

在本地更新,git push origin master到coding(之前说错了),然后在阿里云里面git pull origin master

我的意思是在提交到了coding了,阿里云也更新吗?在阿里云里面运行git pull就行了。