希望thinkphp5.0开发的网站404页面也更好看,能告诉访问错误,同时提供动态内容保证访问流量不轻易丢失。开发思路也是很简单,由于系统配置文件config.php设置了默认的空控制器:
// config.php // 默认的空控制器名 'empty_controller' => 'Error',
这个控制器的名字为"Error",意味着所有没有被访问到的控制器最后都访问这个控制器,因此可以用这个控制器来控制404页面的内容:
<?php
namespace app\index\controller;
use app\common\controller\HomeBase;
use app\common\model\Article as ArticleModel;
use app\common\model\Category as CategoryModel;
use app\common\helper\UrlHelper;
use think\Controller;
use think\Db;
/**
* 404 页面
* Class Error
* @package app\index\controller
*/
class Error extends HomeBase
{
public function index()
{
//顶部导航
$category = CategoryModel::all();
$this->assign('category', $category);
/** 侧栏数据 **/
$limitsize = 5;
/* 头条 */
$top['status'] = ['=', 1];
$top['is_top'] = ['=', 1];
$topArticles = ArticleModel::where($top)->order('create_time', 'desc')->limit($limitsize)->select();
// 添加文章链接
foreach ($topArticles as $top) {
$top->url = UrlHelper::generateArticleUrl($top->id);
}
$this->assign('topArticles', $topArticles);
/* 特别推荐 */
$special['status'] = ['=', 1];
$special['is_recommend'] = ['=', 1];
$specialArticles = ArticleModel::where($special)->order('create_time', 'desc')->limit($limitsize)->select();
// 添加文章链接
foreach ($specialArticles as $special) {
$special->url = UrlHelper::generateArticleUrl($special->id);
}
$this->assign('specialArticles', $specialArticles);
/* 热门随机文章 */
$random['status'] = ['=', 1];
$maxID = ArticleModel::max('id');
$randomArticles = ArticleModel::where($random)
->where('id', '>=', 1)
->where('id', '<=', $maxID)
->orderRaw('RAND()')
->limit($limitsize)
->select();
// 添加文章链接
foreach ($randomArticles as $random) {
$random->url = UrlHelper::generateArticleUrl($random->id);
}
$this->assign('randomArticles', $randomArticles);
////////////////////////////////////////////////////////////////////////////
/* 列表页右侧 最新发布 */
$latestArticles = ArticleModel::where('status', 1)
->where('id', '>=', 1)
->where('id', '<=', $maxID)
->orderRaw('RAND()')
->limit($limitsize)
->select();
// 添加文章链接
foreach ($latestArticles as $latest) {
$latest->url = UrlHelper::generateArticleUrl($latest->id);
}
$this->assign('latestArticles', $latestArticles);
/* 列表页右侧 随机精选 */
$random['status'] = ['=', 1];
$maxID = ArticleModel::max('id');
$randomHitArticles = ArticleModel::where('status', 1)
->where('id', '>=', 1)
->where('id', '<=', $maxID)
->whereOr('is_recommend', 1)
->whereOr('is_top', 1)
->orderRaw('RAND()')
->limit($limitsize)
->select();
// 添加文章链接
foreach ($randomHitArticles as $randomHit) {
$randomHit->url = UrlHelper::generateArticleUrl($randomHit->id);
}
$this->assign('randomHitArticles', $randomHitArticles);
/* 加载系统配置 */
$site_config = Db::name('system')->field('value')->where('name', 'site_config')->find();
$site_config = unserialize($site_config['value']);
$this->assign('site_config', $site_config);
return $this->fetch('error/index');
}
}以上是本站的部分代码,然后再创建对应的模板页。当完成程序端之后,需要再去确认服务器端nginx的配置:
error_page 404 /404.html;
根据nginx这个错误页设置,我们还需要在程序端配置对应的路由:
//404页面
Route::get('404', 'index/error/index');当访问到不存在的页面的时候,系统指派访问Error控制器的index方法,加载对应的模板,同时服务器nginx的配置也完全对应。





