Files
orico-official-website/app/openapi/controller/v1/Article.php

99 lines
2.5 KiB
PHP

<?php
declare (strict_types = 1);
namespace app\openapi\controller\v1;
use app\openapi\model\ArticleModel;
class Article
{
/**
* 文章列表
*/
public function list()
{
$params = request()->get([
'category_id',
'language' => 'zh-cn',
'page/d' => 1,
'size/d' => 50
]);
if ($params['size'] > 200) {
// 每页不超过200条
$params['size'] = 200;
}
$articles = ArticleModel::with([
'category' => fn($query) => $query->field('id, name')
])
->field([
'id',
'language_id',
'category_id',
'title',
'desc',
'image',
'deleted_at'
])
->categoryId($params['category_id']??null)
->language($params['language']??'zh-cn')
->hidden(['language_id', 'category_id'])
->paginate([
'list_rows' => $params['size'],
'page' => $params['page']
])
->each(function($it) {
if (!empty($it['image']) && !str_starts_with($it['image'], 'http')) {
$it['image'] = image_domain_concat($it['image']);
}
return $it;
});
return success('success', $articles);
}
/**
* 文章详情
*/
public function detail()
{
$id = request()->param('id');
$article = ArticleModel::with([
'category' => fn($query) => $query->field('id, name')
])
->withoutField([
'language_id',
'author',
'source',
'seo_title',
'seo_keywords',
'seo_desc',
'created_at',
'updated_at',
'deleted_at'
])
->bypk($id)
->hidden(['category_id'])
->find();
if (is_null($article)) {
return error('the article does not exist');
}
// 图片处理
if (!empty($article['image']) && !str_starts_with($article['image'], 'http')) {
$article['image'] = image_domain_concat($article['image']);
}
// 详情中图片处理
if (!empty($article['content'])) {
$article['content'] = html_image_replace($article['content']);
}
return success('success', $article);
}
}