76 lines
2.3 KiB
PHP
Executable File
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);
|
|
}
|
|
}
|
|
|