我们开发时遵守的代码风格是 Laravel 项目开发规范。遵照此规范,在实际操作中,有许多重复,接下来推荐一款专为此规范量身定制的代码生成器 —— Laravel 5.x Scaffold Generator 。代码生成器能让你通过执行一条 Artisan 命令,完成注册路由、新建模型、新建表单验证类、新建资源控制器以及所需视图文件等任务,不仅约束了项目开发的风格,还能极大地提高我们的开发效率。

在接下来的 LaraBBS 项目开发中,我们将利用此扩展来快速构建项目原型。

后续章节我们将『Laravel 5.x Scaffold Generator』简称为『代码生成器』,或者『生成器』。

安装

1. 通过 Composer 安装

$ composer require "summerblue/generator:~0.5" --dev

2. 添加 Service Provider

打开/app/Providers/AppServiceProvider.php 添加注册

public function register()
{
     if (app()->environment() == 'local' || app()->environment() == 'testing') {
        $this->app->register(\Summerblue\Generator\GeneratorsServiceProvider::class);
    }
}

使用前先整理表字段

在使用代码生成器之前,我们需要先整理好 topics 表的字段名称和字段类型:

字段名称 描述 字段类型 加索引缘由 其他
title 帖子标题 字符串(String) 文章搜索
body 帖子内容 文本(text) 不需要
user_id 用户 ID 整数(int) 数据关联 unsigned()
category_id 分类 ID 整数(int) 数据关联 unsigned()
reply_count 回复数量 整数(int) 文章回复数量排序 unsigned(), default(0)
view_count 查看总数 整数(int) 文章查看数量排序 unsigned(), default(0)
last_reply_user_id 最后回复的用户 ID 整数(int) 数据关联 unsigned(), default(0)
order 可用来做排序使用 整数(int) 不需要 default(0)
excerpt 文章摘要,SEO 优化时使用 文本(text) 不需要
slug SEO 友好的 URI 字符串(String) 不需要 nullable()
  • unsigned() —— 设置不需要标识符(unsigned)
  • default() —— 为字段添加默认值。
  • nullable() —— 可为空

以上字段,拼接为最终命令:

$ php artisan make:scaffold Topic --schema="title:string:index,body:text,user_id:integer:unsigned:index,category_id:integer:unsigned:index,reply_count:integer:unsigned:default(0),view_count:integer:unsigned:default(0),last_reply_user_id:integer:unsigned:default(0),order:integer:unsigned:default(0),excerpt:text,slug:string:nullable"

执行结果:

命令 make:scaffold--schema 选项中是以逗号分隔的字段名称和设置信息,字段分别如下,对于上面的字段表格:

title:string:index
body:text
user_id:integer:unsigned:index
category_id:integer:unsigned:index
reply_count:integer:unsigned:default(0)
view_count:integer:unsigned:default(0)
last_reply_user_id:integer:unsigned:default(0)
order:integer:unsigned:default(0)
excerpt:text
slug:string:nullable

接下来我们看下代码生成器为我们做了哪些事情:

  1. 创建话题的数据库迁移文件 —— 2017_09_26_111713_create_topics_table.php;
  2. 创建话题数据工厂文件 —— TopicFactory.php;
  3. 创建话题数据填充文件 —— TopicsTableSeeder.php;
  4. 创建模型基类文件 —— Model.php, 并创建话题数据模型;
  5. 创建话题控制器 —— TopicsController.php;
  6. 创建表单请求的基类文件 —— Request.php,并创建话题表单请求验证类;
  7. 创建话题模型事件监控器 TopicObserver 并在 AppServiceProvider 中注册;
  8. 创建授权策略基类文件 —— Policy.php,同时创建话题授权类,并在 AuthServiceProvider 中注册;
  9. 在 web.php 中更新路由,新增话题相关的资源路由;
  10. 新建符合资源控制器要求的三个话题视图文件,并存放于 resources/views/topics 目录中;
  11. 执行了数据库迁移命令 artisan migrate
  12. 因此次操作新建了多个文件,最终执行 composer dump-autoload 来生成 classmap。

开始测试

此时打开 http://larabbs.test/topics ,查看话题列表页面:

打开 http://larabbs.test/topics/create 会被跳转到登录页面,登录成功后会自动跳转到: