fn_b/app/Http/Controllers/Web/ArticlesController.php
2026-02-12 12:36:53 +08:00

76 lines
2.3 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Web;
use App\Http\Controllers\Controller;
use App\Services\ArticlesService;
use Illuminate\Http\Request;
use App\Models\Articles;
class ArticlesController extends Controller
{
protected $oArticlesService;
public function __construct(ArticlesService $oService)
{
$this->oArticlesService = $oService;
}
public function search(Request $oRequest, string $sKeyword)
{
$xData = $this->oArticlesService->search($sKeyword, 'view');
return view('pages.articles.default.index', $xData);
}
public function like(int $iArticleId, Request $oRequest)
{
// 1. 获取/生成指纹
$sFingerprint = $oRequest->cookie('visitor_token')
?? md5($oRequest->ip() . $oRequest->userAgent());
// 2. 调用 Service
$aResult = $this->oArticlesService->like($iArticleId, $oRequest->ip(), $sFingerprint);
if (!$aResult['status']) {
return response()->json($aResult);
}
// 3. 成功后下发持久 Cookie
return response()->json($aResult)
->withCookie(cookie()->forever('visitor_token', $sFingerprint));
}
public function listByTag(Request $oRequest, string $sSlug)
{
$xData = $this->oArticlesService->getTagArticles($sSlug, 'view');
return view('pages.articles.default.index', $xData);
}
public function list(Request $oRequest, string $sSlug1, string $sSlug2 = null)
{
$sSlug = $sSlug2 ?? $sSlug1;
$xData = $this->oArticlesService->getCategoryArticles($sSlug, 'view');
return view('pages.articles.default.index', $xData);
}
public function show(string $sArticleSlug, Request $oRequest)
{
$sFingerprint = $oRequest->cookie('visitor_token')
?? md5($oRequest->ip() . $oRequest->userAgent());
$xData = $this->oArticlesService->getArticle($sArticleSlug, $oRequest->ip(), $sFingerprint);
// $xData["siteUrl"] = config("app.url");
$sViewPath = 'pages.articles.default.show';
//
// if ($xData["oArticle"]->oCategory->sSlug == "freenode") {
// $sViewPath = 'pages.articles.freenode.show';
// }
return view($sViewPath, $xData);
}
}