在 thinkphp 单应用中,先把新闻 url 映射到控制器。控制器用模型取已发布记录,再把数据交给视图。下面用一个新闻 id 串起路由、查询和页面。
让 URL 把新闻 ID 交给控制器
示例为 ThinkPHP 8,数据库已配置且已安装与项目兼容的 think-view。将路由放进 route/app.php。
<?php
use think\facade\Route;
Route::get('news/:id', 'News/read')
->pattern(['id' => '[1-9][0-9]*']);
访问 /news/1 时,框架把 id 交给 News 控制器的 read 方法。
在模型和控制器之间分配职责
在 app/model/Article.php 中声明 Article 模型,表名按项目调整。控制器放在 app/controller/News.php。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
立即学习“PHP免费学习笔记(深入)”;
/* app/model/Article.php */
namespace app\model;
class Article extends \think\Model
{
protected $name = 'article';
}
/* app/controller/News.php,放在独立 PHP 文件中 */
namespace app\controller;
class News
{
public function read(int $id)
{
$article = \app\model\Article::where('id', $id)
->where('status', 'published')->find();
if ($article === null) {
return response('News not found', 404);
}
return \think\facade\View::fetch('news/read', [
'article' => $article->toArray(),
]);
}
}将两个类分别保存到对应文件,并在每个文件首行添加 PHP 开始标签。示例表含 id、title、body 和 status。
用模板渲染标题和正文
在默认视图目录创建 view/news/read.html,正文按纯文本展示。
<article>
<h1>{$article.title|htmlspecialchars}</h1>
<div style="white-space: pre-wrap">{$article.body|htmlspecialchars}</div>
</article>用一条已发布新闻检查页面内容,再用不存在的 ID 或草稿 ID 检查 404。路由错误先核对 URL 和控制器,数据错误再检查查询条件。


















