本系列文章根据Laracasts上的视频书写而成。

初始化项目

首先确保已经安装好基础框架,如mysql、nginx、PHP、composer等。相关的软件安装不在此文章的讨论范围之内。

此命令会新建一个全新的laravel5.4项目。然后在app文件夹下新建Models文件夹,将User.php移到Models文件夹下,并且将User.phpnamespace更改为App\Models

接着将项目中的所有用到App\User的地方更改为App\Models\User。使用Sublime Text编辑器的话可以使用cmd+shift+f键来进行全局替换。此处替换共涉及到了4处修改。

创建Model

此命令会在Models文件夹下创建Thread模型,-mr表示同时创建迁移文件和控制器。这个模型表示帖子内容。接着在database/migrations/文件夹下打开新建好的迁移文件时间戳_create_threads_table.php文件。

代码里的注释是为了方便阅读文章理解而写,实际写项目的时候可以不用写上面的注释。接着执行下面的迁移命令创建数据库表(需要在.env文件中事先配置好数据库)。

每个帖子都应当有留言回复区。接着我们创建这个模型。然后编辑创建好的迁移文件。

再次执行迁移命令。

填充数据

此命令会在database/seeds/文件夹下新建一个ThreadTableSeeder.php文件,打开并编辑。

修改完成后执行seed命令填充数据库。

TDD开发Threads

所谓TDD(Test-driven development)是指先写好预期的测试文件,然后根据测试结果来开发项目。

tests/Feature文件夹下的ExampleTest.php文件夹重新命名为ThreadsTest.php,然后修改代码如下。

接着进行测试,测试需要用到数据库,虽然我们在.env文件中已经配置好了本地数据库。但是,测试文件应当与本地数据库区分开来。打开项目根目录下的phpunit.xml文件,加入下面两行。

上面两个有注释的代码为新加入进去的,具体含义为在测试的时候使用sqlite作为测试数据库,并且使用内存来进行测试,不需要新建sqlite文件。

接着可以进行测试了。在命令行中输入下面的代码。

通过输出的信息可以发现,我们期望获得200,但是收到404的状态码。此时,打开routes/web.php文件夹就会发现,我们并没有创建threads路由。因此,需要我们创建相应的路由。

打开已经创建好的ThreadController.php,在index方法下写入如下代码。

上面的代码表示获取Thread模型里的全部数据,并且根据created_at进行降序排列。并且将数据传入到blade模版中。接着新建resources/views/threads/index.blade.php文件。

为了更加方便的进行测试,让我们先写入一些基本文件。

此命令会新建一些基础的登录、注册等内容。具体可以到这里进行查看。此时,我们最关心的是新建了resources/layouts/app.balde.php文件。

编辑threads/index.blade.php文件。

之后,继续进行测试。可以发现,测试成功。此时,访问forum.app/threads页面会发现已经将所有thread内容展示出来,尽管页面效果比较糟糕。

注:此项目使用homestead,并配置sites地址为 forum.app,实际网址请根据自身情况输入。

尽管测试通过了,但是这只是最简单的一个测试,接下来我们要添加一些新的内容。

此时测试文件中的内容已经改变,上述代码表示,新建一个thread,然后访问threads路由,期望能显示出新建立thread的title,此时进行测试的话,显示测试成功。

继续向测试文件中添加功能。代码如下。

新加入的代码表示,访问任意一个thread,应该能返回对应的title。此时进行测试的话,会显示测试失败。这是因为我们还没有在routes里面建立相应的路由和页面。

修改routes/web.phpThreadController如下。

新建resources/views/threads/show.blade.php

此时,进行测试会显示成功,并且访问forum.app/threads/1会显示id为1的thread内容。不过,在我们的测试方法中,将两个测试写到了一个方法内,这样是不太好的,下面是重构之后的代码。

在文章最后,我们为thread列表首页的每个thread添加一个超链接。

本次代码地址https://github.com/SimuraEpona/forum/tree/Article-1.

发表评论

电子邮件地址不会被公开。 必填项已用*标注