2.10 单篇文章内容

第 17 节 / 共 46 节 课程:ThinkPHP
上一节做出来的文章列表,标题都是类似于localhost/article/3这样的链接,最后一位是数字,代表的是文章的id,此页面应该是显示文章的内容。
首先,在app/controller里面添加Article.php,用来处理请求localhost/article/3:
<?php
namespace app\controller;
use app\BaseController;
use think\Exception;
class Article extends BaseController {
    public function read($articleid) {
        try {
            $article = new \app\model\Article();
            $result = $article->findByArticleId($articleid);
           
            if ($result=="") {
                return view('../view/public/error_500.html');
            } 
            // 在view目录下新建article目录,并创建read.html模板页面       
            return  view('read', ['article'=>$result[0]]);
            
        }
            // 可能出现异常的情况就是文章ID不正确,则直接响应500页面
        catch (\Exception $e) {            
            return view('../view/public/error_500.html');
        }
    }
}
接着,要在app/model/Article.php里面添加查询函数,根据id查询文章的函数:
public function findByArticleId($articleid) {
        $result = $this->alias('a')->join('users u', 'u.userid=a.userid')
            ->where('a.hide', 0)->where('a.drafted', 0)->where('a.checked', 1)
            ->where('a.articleid', $articleid)->field('a.*, u.nickname')->select();
        return $result;
}

然后是前端的显示,在view/article下创建文件read.html,把下面的代码粘贴进去:
{extend name="../view/public/base.html" /}
{block name="content"}
<div class="col-lg-12 col-md-12 col-sm-12 col-xs-12 info">
    作者:{$article.nickname}   类别:{$Think.config.article_type[$article.category]}
    日期:{$article.createtime}   
    阅读:{$article.readcount} 次   消耗积分:{$article.credit} 分
</div>
<div class="col-12 content" id="content">
    {$article.content | raw}    <!-- 要保持HTML原样输出,不能转义 -->
</div>
{include file="../view/public/side.html" /}
{/block}
此模板还需要文章分类的配置文件,在config(和app平行的一个文件夹)里面创建文件article_type.php,把下列代码粘贴进去:
<?php
return [
    '1' => 'PHP开发',
    '2' => 'Java开发',
    '3' => 'Python开发',
    '4' => 'Web前端',
    '5' => '测试开发',
    '6' => '数据科学',
    '7' => '网络安全',
    '8' => '蜗牛杂谈'
];
最后就是路由,在route/app.php里面添加路由配置:
Route::get('/article/:articleid$', 'article/read');