ThinkPHP5.x + Apache配置及详细使用

一 : ThinkPHP配置前准备:

配置前需要安装PHP5.4.0以上版本
ThinkPHP5.0完全开发手册

1 : 对于Mac系统
Mac上安装配置Apache +Tomcat+JDK
2 : linux 或者 CentOS 等
php7详细安装教程(linux + nginx +PHP + mysql)
Linux 安装和卸载 nginx操作

3 : 下面以本地电脑为例:
打开: http://localhost 显示 it works ! 说明Apache配置ok,
复制一个info.php文件到根目录下,http://localhost/info.php显示PHP相关信息说明php环境ok.

在上面步骤3条件下,继续往下

二 : ThinkPHP文件下载

下载方式一:
(1) : 官网 http://www.thinkphp.cn/
注册登录官网,直接下载:

图片.png

(2) : 找到你的Apache的web根目录,
比如我的是
/Library/WebServer/Documents/
将下载的文件直接解压到该路径下:

图片.png

(3) : 打开连接: http://localhost/public/
(注意: 如果你的项目不是在根路径下,比如在创建项目/thinkPHPPro/下
那么路径应该是http://你的域名/thinkPHPPro/public)
显示如下,说明基础环境ok:

图片.png

如果不成功,给runtime文件设置一下权限:
chmod -R 777 /Library/WebServer/Documents/runtime

下载方式二 : 通过git 下载(4行语句) git安装文档

cd /Library/WebServer/Documents/
git init
git clone https://git.coding.net/liu21st/thinkphp5.git
git clone https://git.coding.net/liu21st/framework.git

(将thinkphp5移动到framework文件夹下)

简单下载示例(可忽视):

-bash: php-version: command not found
localhost:niexiaobo niexiaobo$ cd /Users/niexiaobo/Downloads/php5 
localhost:php5 niexiaobo$ git init
Initialized empty Git repository in /Users/niexiaobo/Downloads/php5/.git/
localhost:php5 niexiaobo$ git clone https://git.coding.net/liu21st/thinkphp5.git
Cloning into 'thinkphp5'...
remote: Counting objects: 13519, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 13519 (delta 10), reused 0 (delta 0)
Receiving objects: 100% (13519/13519), 5.76 MiB | 3.20 MiB/s, done.
Resolving deltas: 100% (8588/8588), done.
localhost:php5 niexiaobo$ git clone https://git.coding.net/liu21st/framework.git
Cloning into 'framework'...
remote: Counting objects: 43528, done.
remote: Compressing objects: 100% (16100/16100), done.
remote: Total 43528 (delta 26953), reused 42770 (delta 26499)
Receiving objects: 100% (43528/43528), 10.67 MiB | 2.88 MiB/s, done.
Resolving deltas: 100% (26953/26953), done.
localhost:php5 niexiaobo$ 

三 : ThinkPHP文件目录结构

ThinkPHP 5相对于以往3的版本做了一些改变:

project 应用部署目录
├─application 应用目录(可设置)
│ ├─common 公共模块目录(可更改)
│ ├─index 模块目录(可更改)
│ │ ├─config.php 模块配置文件
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ └─ ... 更多类库目录
│ ├─command.php 命令行工具配置文件
│ ├─common.php 应用公共(函数)文件
│ ├─config.php 应用(公共)配置文件
│ ├─database.php 数据库配置文件
│ ├─tags.php 应用行为扩展定义文件
│ └─route.php 路由配置文件
├─extend 扩展类库目录(可定义)
├─public WEB 部署目录(对外访问目录)
│ ├─static 静态资源存放目录(css,js,image)
│ ├─index.php 应用入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于 apache 的重写
├─runtime 应用的运行时目录(可写,可设置)
├─vendor 第三方类库目录(Composer)
├─thinkphp 框架系统目录
│ ├─lang 语言包目录
│ ├─library 框架核心类库目录
│ │ ├─think Think 类库包目录
│ │ └─traits 系统 Traits 目录
│ ├─tpl 系统模板目录
│ ├─.htaccess 用于 apache 的重写
│ ├─.travis.yml CI 定义文件
│ ├─base.php 基础定义文件
│ ├─composer.json composer 定义文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 惯例配置文件
│ ├─helper.php 助手函数文件(可选)
│ ├─LICENSE.txt 授权说明文件
│ ├─phpunit.xml 单元测试配置文件
│ ├─README.md README 文件
│ └─start.php 框架引导文件
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件

四 : ThinkPHP简单使用

(1) : 修改默认页面

上文中有介绍,打开连接: http://localhost/public/显示一段默认页面.
那么该页面具体位置在哪呢?
对默认项目的
application/index/controller/index.php
做一些简单的修改:

默认代码:

<?php
namespace app\index\controller;

 class Index
 {
     public function index()
     {
       return '<style type="text/css">*{ padding: 0; margin: 0; } .think_default_text{ padding: 4px 48px;} a{color:#2E5CD5;cursor: pointer;text-decoration: none} a:hover{text-decoration:underline; } body{ background: #fff; font-family: "Century Gothic","Microsoft yahei"; color: #333;font-size:18px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.6em; font-size: 42px }</style><div style="padding: 24px 48px;"> <h1>:)</h1><p> ThinkPHP V5<br/><span style="font-size:30px">十年磨一剑 - 为API开发设计的高性能框架</span></p><span style="font-size:22px;">[ V5.0 版本由 <a href="http://www.qiniu.com" target="qiniu">七牛云</a> 独家赞助发布 ]</span></div><script type="text/javascript" src="https://tajs.qq.com/stats?sId=9347272" charset="UTF-8"></script><script type="text/javascript" src="https://e.topthink.com/Public/static/client.js"></script><think id="ad_bd568ce7058a1091"></think>';
    }
}

修改后:

<?php
namespace app\index\controller;

 class Index
 {
     public function index()
     {
        return  'Hello,World! this is default page !';
    }
}

保存后http://localhost/public链接显示的就是 'Hello,World! this is default page !'这句话了.

(2) : 模板渲染
修改项目的application/index/controller/index.php文件:
主要修改有:引用Controller类 , 扩展index类方法 , 添加方法hello.

修改后如下:

<?php
namespace app\index\controller;

use think\Controller;//引入Controller类
class Index extends Controller
{
   public function index()
    {
        return  'Hello,World! this is default page !';
    }
    public function hello()
    {
        return 'hello';
    }
    
}

打开http://localhost/public/index.php/index/index/hello链接
显示如下:

图片.png

上述只是通过修改模板,无需创建相应文件就可以返回.

(3) : 模板渲染, 并创建文件
还是修改项目的application/index/controller/index.php文件:
index方法,结果如下:

<?php
namespace app\index\controller;

use think\Controller;//引入Controller类
class Index extends Controller
{
   public function index($name='聂小波')
    {
        $this->assign('name',$name);
        return $this->fetch();
    }
    public function hello()
    {
        return 'hello';
    }
    
}

修改后index需要获取变量的,此时打开http://localhost/public链接会报错的,因为还没有index.html文件.

进入项目的application/index/下创建view文件夹,再进入view下创建index文件夹进入再创建index.html.(如下图所示)

图片.png

编辑index.html:

<html>
<head>
<title>hello {$name}</title>
</head>
<body>
    hello {$name}!
</body>
</html> 

打开地址http://localhost/public/index.php/index/index显示:

图片.png

index.html展示时需要一个name变量值,而该值是通过index.php中模板方法传递过来的.

(5) : 通过参数param获取内容
修改上面index.php中的hello方法:

public function hello(Request $request)
    {
        echo 'hello :'.$request->param('name').'!';
        echo '你今年'.$request->param('age').'岁 !';
    }

打开链接地址:
http://localhost/public/index.php/index/index/hello.html?name=bobo&age=18

参数有姓名和年龄,结果如图:


图片.png

(4) : 链接数据库mysql
还是修改项目的application/index/controller/index.php文件:
准备工作:
安装mysql,创建数据库testDB,创建表testTable,表里面添加几条数据,包含字段id, uname,等等

添加dbTest方法(域名localhost不行的话要用127.0.0.1),
use think\Db;//引入数据库
结果如下:

<?php
namespace app\index\controller;

use think\Controller;//引入Controller类
use think\Db;//引入数据库
class Index extends Controller
{
   public function index($name='聂小波')
    {
        $this->assign('name',$name);
        return $this->fetch();
    }
    public function hello()
    {
        return 'hello';
    }
   public function dbTest()
      {
        return Db::connect([
        'type'=>'mysql',
        'hostname'=>'127.0.0.1',
        'database'=>'testDB',
        'username'=>'root',
        'password'=>'root',
        ])
        ->table('testTable')
        ->where('id','2')
        ->value('uname');
     }
}

dbTest(): 查询testTable表中id=2 的uname字段:
打开链接http://localhost/public/index.php/index/index/dbtest
结果如下:

图片.png

(6) : 统一配置数据库mysql信息
在上面dbTest(): 中我们需要设置登录信息, 下面开始在公共文件统一配置:
进入项目文件编辑: /application/database.php

return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'testA',
    // 用户名
    'username'        => 'root',
    // 密码
    'password'        => 'root',
    // 端口
    'hostport'        => '3306',
    // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
.
.
.

还是修改项目的application/index/controller/index.php文件:

添加dbTest2方法(查询testTable表下id=2的整条数据):

public function dbTest2()
    {
       $res = Db::table('testTable')->where('id',2)->find();
       dump(is_null($res)?'没有查到':$res);
    }

打开连接http://localhost/public/index.php/index/index/dbTest2
结果如下,返回成功,以后就不需要重复设置登录信息了:

图片.png

更多数据库操作方法: ThinkPHP5.0完全开发手册

(https://www.cnblogs.com/samphp/p/8594291.html)
 //1、单条查询
public function dbTest4()
{
$res = Db::table('pzq_article')
->field(['title'=>'标题','id'=>'编号'])//可添加别名
->where('id','=',20)//如果是等号,=可以省略
->find();//如果是主键查询,可省略上面where,这行写->find(20);
dump(is_null($res)?'没有查到':$res);
}
//2、多条查旬
public function dbTest5()
{
$res = Db::table('pzq_article')
->field(['id','cat_id','title'])
->where([
['id','>',20],
['cat_id','=',2],
])//一个条件,直接用表达式->where('id','>',20)。多个条件用数组
->order('id desc')->limit(3)->select();

if(empty($res)){
return '没有查到';
}else{
dump($res);
}

}

//3、数据添加
public function dbTest6()
{
$data = [
'name'=>'Sam2',
'age'=>'29',
'posttime'=>time()
];
$dataall=[
['name'=>'Sam3','age'=>'29','posttime'=>time()],
['name'=>'Sam4','age'=>'30','posttime'=>time()],
];
//(1)单条插入
//return Db::table('test')->data($data)->insert();
//(2)插入同时返回新增主键id
//return Db::table('test')->insertGetId($data);
//(3)插入多条数据
return Db::table('test')->data($dataall)->insertAll();
}
//4更新数据
public function dbTest7()
{
// return Db::table('test')
// ->where('id','=',4)
// ->update(['name'=>'SamC','age'=>'31']);
//如果where条件是主键,还可以如下使用
return Db::table('test')
->update(['name'=>'SamCheng','age'=>'30','id'=>4]);
}
//5删除操作
public function dbTest8()
{
//return Db::table('test')->delete(6);
//或者
return Db::table('test')->where('id',5)->delete();
}
//mysql原生语句 查询
public function dbTest9()
{
$sql = "select name,age from test where id>2";
dump(Db::query($sql));
}
//mysql 增、删、改 用Db::execute($sql)
public function dbTest10()
{
//$sql = "update test set name='samC' where id=4";
//$sql = "insert test set name='Yan',age='30'";
$sql = "delete from test where id=4";
return Db::execute($sql);
}

五 : ThinkPHP路由设置

(7) : 路由: 隐藏真实路径
修改项目路径下 /application/route.php
修改前初始代码:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

return [
    '__pattern__' => [
        'name' => '\w+',
    ],
    '[hello]'     => [
        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
        ':name' => ['index/hello', ['method' => 'post']],
    ],

];

添加一段代码:

<?php

return [
    '__pattern__' => [
        'name' => '\w+',
    ],
    '[hello]'     => [
        ':id'   => ['index/hello', ['method' => 'get'], ['id' => '\d+']],
        ':name' => ['index/hello', ['method' => 'post']],
    ],

    '__alias__' =>  [
        'home'  =>  'index/index',
    ],
];

或者这样写:

    <?php
    use think\Route;
    Route::alias('home','index/index');

意思是真实路径里的index/index都可以使用home来代替:
比如:步骤(6)中打开连接http://localhost/public/index.php/index/index/dbTest2


打开连接http://localhost/public/index.php/home/dbTest2
效果是一样的.

更多路由设置参考 ThinkPHP5.1完全开发手册

(8) : 路由: 页面跳转
下面以登录为例,登录成功后跳转到首页index,失败后跳转错误页面

还是修改项目的application/index/controller/index.php文件:

添加login方法和check()方法:

// 显示登录页面
    public function login(){
        return $this->fetch();
    }
    //提交登录
    public function check(){
        //获取参数
        $user=$_POST['username'];
        $pwd=$_POST['password'];

        // 判断登陆成功失败的逻辑
        if($user=='admin' && $pwd=='123'){
            //如果成功则跳到index/index页面
            $this->success('登陆成功',url('/index/index'));
        }else{
            $this->error('登陆失败');
        }
      }

下面路径下创建login.html登录验证页面:
/application/index/view/index/login.html
代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登陆</title>
</head>
<body>
    <!--{:url('check')}  :提交到本页面的控制器下的check方法-->
    <form action="{:url('check')}" method="post">
        <p>
            账号:<input type="text" name="username" id="username">
        </p>
        <P>
            密码:<input type="text" name="password" id="password">
        </P>
        <p>
            <input type="submit" value="提交">
            <input type="reset" value="重置">
        </p>
    </form>
</body>
</html>

打开下面地址
http://localhost/public/index.php/index/index/login.html

图片.png

输入错误的username,点击提交按钮:
登录失败, 跳转错误页面(默认3秒倒计时):


错误页面

输入正确账号密码admin 和 123.
跳转成功页面(默认3秒倒计时),然后回到index页面:

图片.png

(9) : 路由: 页面重定向

打开某个链接时,直接跳转到其他地址

还是修改项目的application/index/controller/index.php文件:
添加跳转方法:

    // 页面重定向
    public function jumpto(){
        $this->redirect('https://www.baidu.com');
    }

打开链接:
http://localhost/public/index.php/index/index/jumpto
成功跳转到百度页面:

图片.png

(10-A) : 模型的使用 : 查询表
目的 : 通过创建使用Model来查询表数据

详细参考 : 模型定义文档

1 : 首先数据库有一张表chat.
2 : 在/application/index/下新建model文件夹,并创建一个Chat.php文件(根据表名, 驼峰命名,首字母大写)
Chat.php :

<?php
namespace app\index\model;

use think\Model;
class Chat extends Model{
    // 设置当前模型对应的完整数据表名称
    protected $table="chat";
}

?>

3 : 还是修改项目的application/index/controller/index.php文件:
添加跳转方法:

//模型
    public function user()
    {
    // 实例化数据模型
    $user=new \app\index\model\Chat;
    //get(3): 查询主键为3的数据,并转成array返回
    dump($user::get(3)->toArray());
    }

4 : 打开连接:http://localhost/public/index.php/home/user
也即是http://localhost/public/index.php/index/index/user

图片.png

(10-B) : 模型的理解
通过上述对模型的简单使用之后,接着对模型做一个简单是介绍:

1 这里的模型model到底是什么?

根据使用方法:

use think\Model;
class Chat extends Model

知道: 我们新建的Chat模型文件,其实是继承了think\Model文件的功能和方法,说明Chat模型在创建初始化结束后,就拥有了think下Model的功能.
修改上述控制器方法

//模型
    public function user()
    {
    // 实例化数据模型
    $user=new \app\index\model\Chat;
    //直接打印模型
    dump($user);
    }

打开链接http://localhost/public/index.php/index/index/user
结果如下:

object(app\index\model\Chat)#10 (35) {
  ["table":protected] => string(10) "think_user"
  ["connection":protected] => array(0) {
  }
  ["parent":protected] => NULL
  ["query":protected] => NULL
  ["name":protected] => string(4) "Chat"
  ["class":protected] => string(20) "app\index\model\Chat"
  ["error":protected] => NULL
  ["validate":protected] => NULL
  ["pk":protected] => NULL
  ["field":protected] => array(0) {
  }
  ["except":protected] => array(0) {
  }
  ["disuse":protected] => array(0) {
  }
  ["readonly":protected] => array(0) {
  }
  ["visible":protected] => array(0) {
  }
  ["hidden":protected] => array(0) {
  }
  ["append":protected] => array(0) {
  }
  ["data":protected] => array(0) {
  }
  ["origin":protected] => array(0) {
  }
  ["relation":protected] => array(0) {
  }
  ["auto":protected] => array(0) {
  }
  ["insert":protected] => array(0) {
  }
  ["update":protected] => array(0) {
  }
  ["autoWriteTimestamp":protected] => bool(false)
  ["createTime":protected] => string(11) "create_time"
  ["updateTime":protected] => string(11) "update_time"
  ["dateFormat":protected] => string(11) "Y-m-d H:i:s"
  ["type":protected] => array(0) {
  }
  ["isUpdate":protected] => bool(false)
  ["force":protected] => bool(false)
  ["updateWhere":protected] => NULL
  ["failException":protected] => bool(false)
  ["useGlobalScope":protected] => bool(true)
  ["batchValidate":protected] => bool(false)
  ["resultSetType":protected] => string(5) "array"
  ["relationWrite":protected] => NULL
}

返回的一堆信息中:
第一条:
["table":protected] => string(10) "think_user" 意思是该模型设置的需要修改的表是think_user.
中间某条:
["append":protected] 意思是具有追加数据的功能
中间某条:
["data":protected] 专门存储数据的
比如下面操作修改的就是这个data:

$user = new User;
$user->data([
    'name'  =>  'thinkphp',
    'email' =>  'thinkphp@qq.com'
]);

所以,模型文件能够更好的帮我们处理一些数据库相关的操作逻辑

(11) : 控制器 : 创建新的控制器
目前为止都是在项目的application/index/controller/index.php修改,这个默认控制器文件index.php .

创建文件login.php:
application/index/controller/login.php
写法和index.php一样:

<?php
namespace app\index\controller;

class login 
{
    public function index()
    {
        return 'login !';
    }
    public function hello()
    {
        return 'hello';
    }
}

打开地址:
http://localhost/public/index.php/index/login
http://localhost/public/index.php/index/login/hello

(11) : 后台目录文件
同默认控制器,在 application/下创建admin文件,专门用来存放和管理后台页面代码(开发方式和上文基本一致):

控制器:
application/admin/controller/index.php
前端html入口(view下存放):
application/admin/view/index.html

图片.png

前端html 的CSS,js,image等静态文件存储路径:
/public/static/

图片.png

前端html 的CSS,js,image静态文件生效设置:
编辑/application/config.php:

 // 视图输出字符串内容替换
    'view_replace_str'       => [
        '__PUBLIC__'=>'/public/static', //将__PUBLIC__指向public/static
        '__ROOT__' => '/',
    ],

引用/public/static下home/css文件:

<link rel="stylesheet" type="text/css" href="__PUBLIC__/home/css/demo.css">

经过上述配置后,访问http://localhost/public/index.php/admin/ 就可以进入后台管理界面.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 理工寝室商店-微信小程序 疑问小结 当时在XAMMP下mysql目录下的bin下 php -v 不起作用.到ph...
    这个超人不会飞阿阅读 1,687评论 1 1
  • 作者:陈中舒时间:2017年5月11日 ThinkPHP 5.0的安装 方式一:官网下载 官网地址:http://...
    忠叔阅读 6,892评论 3 54
  • 我相信,任何一种感情都需要经营,任何一种。 不管是友谊,还是爱情。都会需要一方的主动,或者双方的配合。 两人长时间...
    bf7258edb119阅读 844评论 0 6
  • 今年我26了。 写下这个数字,一阵陌生感油然而生。 读小学的时候总爱看邻居姐姐那些花花绿绿的青春期少女杂志。印象最...
    好好活着的梅菜花阅读 228评论 0 0