域名和空间都是以前搞下来的,本来是打算搞一个对战小游戏的,因为懒,一直没搞,最近有点颓,晚上经常失眠,撸个站玩玩,就叫 快来玩啊
简单讲一下实现吧:
用的是lumen,整个网站功能很简单,就是介绍一些好玩的物品。
1.数据表 重点就两个: 商品表和配置表
商品表负责保存要介绍的商品信息,几乎整站都是从这个表筛选数据进行展示 配置表用来管理一些配置和参数,包括 友情链接、分类、TDK、搜索词等等
- 路由 所有get请求定向到同一个控制器
$router->get('{path:.*}', ['uses' => 'PageController@index']);
由该控制器负责 具体页面的分发:
public function index(){
$page = $this -> input('page'); // 中间件根据url解析出来的页面和页面参数
$param = $this -> input('param');
$method = "_".$page;
if(method_exists($this, $method)) { // 直接调用指定页面进行渲染
return call_user_func([$this, $method], $param);
} else {
return redirect() -> route('notfound');
}
}
// 首页
private function _index($param){
$data = $this -> Data -> get('index'); // 数据service,获取首页数据
return $this -> View -> render('index.html', $data); // 调用视图渲染出来
}
- 中间件
定义一个中间件,负责页面的缓存和url解析(其实这步也可以放到控制器),进行伪静态处理
public function handle($request, Closure $next) {
$path = $request -> getPathInfo();
// 缓存判断
if(env('PAGE_CACHE')) {
$cache = env('PAGE_CACHE_PATH').'/'. md5($path);
if(file_exists($cache) && filemtime($cache) > time() - intval(env('PAGE_CACHE_TIME'))) {
return file_get_contents($cache);
}
}
// 缓存失效才会继续
$info = $this -> _dispatch($path); // 一个私有方法,解析出页面名称和参数
$request -> merge($info); // 合并到请求参数
$response = $next($request);
// 缓存更新
if(!empty($cache)) file_put_contents($cache, $response -> getContent());
return $response;
}
- 其它
- 使用service层来组织和处理数据
- 封装了一个简单的dao,用来做crud
- 用了twig模板引擎,写了几个常用的filter
- 页面用了bootstrap, 做了个简单的管理后台(基于element admin)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。