97 lines
2.5 KiB
PHP
97 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',
|
|
'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);
|
|
}
|
|
}
|